我完全同意下面的导航
想象一下,Book详细信息是在BookDetailActivity的不同实例中完成的。
在book2详细信息中按下之前的堆栈是:
如果我按照guidelines我将使用:
Intent parentActivityIntent = new Intent(this, AllBooksActivity.class);
parentActivityIntent.addFlags(
Intent.FLAG_ACTIVITY_CLEAR_TOP |
Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(parentActivityIntent);
finish();
但是这个代码的最大问题是BookDetailActivity(Book 1)还活着!
在“向上”之后按下后退按钮将显示第1册的详细信息。
如何杀死原始BookDetailActivity
与我按下的活动之间的所有AllBooksActivity
?
答案 0 :(得分:5)
related guidelines article注意到以下内容:
实施注意:作为最佳实践,在实施任一Home时 或者,确保清除任何后代屏幕的后堆栈。 对于Home,后面堆栈上唯一剩下的屏幕应该是 主屏幕。对于向上导航,应删除当前屏幕 从后台堆栈,除非Back导航跨屏幕层次结构。 您可以使用FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_NEW_TASK 意图标志在一起实现这一点。
由于您正在执行此操作,因此应由FLAG_ACTIVITY_CLEAR_TOP关闭BookDetailActivity1。唯一的方法是,如果它可以活着并在按下Back时显示它是否会在AllBooksActivity之前启动。
至于不需要FLAG_ACTIVITY_NEW_TASK( android developer 的回答建议):
使用此标志时,如果某个任务已在运行该活动 你现在开始,然后一个新的活动将不会开始; 相反,当前的任务将被简单地带到前面 屏幕显示它最后的状态。
...所以,如果您的活动存在,它将无法启动新任务。
答案 1 :(得分:1)
然而,我建议不要打开第一个活动,就好像它是一个新活动,只需完成当前活动和之前的活动。
为了做到这一点,使用startActivityForResult调用每个新活动,并将每个活动的结果设置为某个值,表示您希望返回到第一个活动。
您甚至可以将该值设置为类规范名称,并创建一个自动处理所有这些请求的基本活动,以便您不需要处理它。
无论如何,我认为你使用Intent.FLAG_ACTIVITY_NEW_TASK犯了一个错误,因为它创建了一个新任务,所以前一个任务仍然存在。尝试阅读可用的Intents标志以获取更多信息: http://developer.android.com/reference/android/content/Intent.html