본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[android] Up Navigation 설정하기.

by 돼지왕 왕돼지 2013. 12. 19.
반응형


 android, Up Navigation 설정하기.  



Up Navigation 설정하기


1. manifest 에서 parent 로 지정한다.


 4.1 이상에서는 activity tag 에 android:parentActivityName 를 적용하면 된다.

 4.0 이하에서는 meta-data 를 통해 설정해준다.


  <meta-data

     android:name="android.support.PARENT_ACTIVITY"

     android:value="com.example.myfirstapp.MainActivity" />


 


2. actionbar 설정을 바꿔준다.( up 을 지원하도록 )


 getActionBar().setDisplayHomeAsUpEnabled(true);




3. Navigate up 하기.


 NavUtils.navigateUpFromSameTask() 를 통해서 할 수 있다.

 이것이 불리면 현재 Activity 는 종료되면서 stack 의 상단에 있는 녀석이 호출된다.

 이 때 FLAG_ACTIVITY_CLEAR_TOP 으로 불린다.


@Override

public boolean onOptionsItemSelected(MenuItem item) {

    switch (item.getItemId()) {

    case android.R.id.home:

        NavUtils.navigateUpFromSameTask(this);

        return true;

    }

    return super.onOptionsItemSelected(item);

}







3-1. NavUtils.navigateUpFromSameTask() 는 task 의 owner 일때만 유효하다.


 만약 다른 App stack 위에 있다면 new task 로 띄워야 한다.

 즉 특정 Activity 가 Intent-Filter 가 걸려있다면 다른 task 위에 뜰 확률이 있다.


 NavUtils.shouldUpRecreateTask() 를 불러서 현재 activity 가 원래 앱의 task 위에 있는지 확인할 수 있다. true 는 다른 task 위에 있다는 의미이므로, TaskStackBuilder 를 이용하여 navigation 을 해야 한다.


 @Override

public boolean onOptionsItemSelected(MenuItem item) {

    switch (item.getItemId()) {

    case android.R.id.home:

        Intent upIntent = NavUtils.getParentActivityIntent(this);

        if (NavUtils.shouldUpRecreateTask(this, upIntent)) {

            // This activity is NOT part of this app's task, so create a new task

            // when navigating up, with a synthesized back stack.

            TaskStackBuilder.create(this)

                    // Add all of this activity's parents to the back stack

                    .addNextIntentWithParentStack(upIntent)

                    // Navigate up to the closest parent

                    .startActivities();

        } else {

            // This activity is part of this app's task, so simply

            // navigate up to the logical parent activity.

            NavUtils.navigateUpTo(this, upIntent);

        }

        return true;

    }

    return super.onOptionsItemSelected(item);

}


( TaskStackBuilder 를 사용하려면, manifest 의 activity 에 parent 가 제대로 지정되어 있어야 한다. )



반응형

댓글