我想为向上按钮实现以下行为:
- 如果父 Activity 的实例在后栈中,则返回到该父 Activity 的最顶层实例。
- 如果后栈中没有父Activity的实例,则新建一个实例。
实际上,当我第一次阅读 up 和 back 之间的区别时,这种行为是我所期望的默认行为。但是,我现在已经看到,它NavUtils.navigateUpFromSameTask(this);
总是创建父活动的一个新实例,而忽略了一个事实,即在后台堆栈上有一个现成的可用实例。
感谢您的任何建议。
我想为向上按钮实现以下行为:
实际上,当我第一次阅读 up 和 back 之间的区别时,这种行为是我所期望的默认行为。但是,我现在已经看到,它NavUtils.navigateUpFromSameTask(this);
总是创建父活动的一个新实例,而忽略了一个事实,即在后台堆栈上有一个现成的可用实例。
感谢您的任何建议。
尝试在 Manifest android:launchMode="singleInstance" 或 android:launchMode="singleTop" 中为您的活动指定启动模式,查看此问题以获取更多信息Android launchmode="singleTask" 无法按预期工作
如果父 Activity 的实例在后栈中,则返回到该父 Activity 的最顶层实例。
如果这是为了将后台堆栈清除到这个最顶层的实例,我最近解决了这个问题,使用活动自定义向上导航并将onOptionsItemSelected()
-FLAG_ACTIVITY_CLEAR_TOP
标志(链接)添加到Intent
- 而仅切换启动模式并没有结束在我期待的后堆栈中:
@Override
public boolean onOptionsItemSelected(MenuItem menuItem) {
Intent parentActivityIntent = NavUtils.getParentActivityIntent(this);
parentActivityIntent.setFlags(FLAG_ACTIVITY_CLEAR_TOP);
startActivity(parentActivityIntent);
}
也看看http://developer.android.com/training/implementing-navigation/ancestral.html#NavigateUp。