根据指南处理“向上”导航的正确方法

时间:2012-12-26 12:31:34

标签: android android-intent navigation back-stack

我完全同意下面的导航

enter image description here

想象一下,Book详细信息是在BookDetailActivity的不同实例中完成的。

在book2详细信息中按下之前的堆栈是:

  • BookDetailActivity(第2册 - 你在这里)
  • BookDetailActivity(第1册)
  • AllBooksActivity

如果我按照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

2 个答案:

答案 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