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 가 제대로 지정되어 있어야 한다. )
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[android] LocalBroadcastManager 이야기. (0) | 2013.12.23 |
---|---|
[Java] Reflection Tutorial - Annotations. (0) | 2013.12.23 |
[android] software button height (0) | 2013.12.17 |
[Java] Reflection Tutorial - Accessing Private Field, Private Method (0) | 2013.12.17 |
[android] 런타임에 다른 apk 소스 ( dex 파일 ) 읽어오기. (0) | 2013.12.16 |
댓글