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

Waz*_*_Be 7 navigation android android-intent back-stack

我完全赞同下面的导航

在此输入图像描述

想象一下,Book详细信息是在BookDetailActivity的不同实例中创建的.

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

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

如果我遵循我将使用的指导方针:

     Intent parentActivityIntent = new Intent(this, AllBooksActivity.class);
        parentActivityIntent.addFlags(
                Intent.FLAG_ACTIVITY_CLEAR_TOP |
                Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(parentActivityIntent);
        finish();
Run Code Online (Sandbox Code Playgroud)

但是这个代码的一大问题是BookDetailActivity(Book 1)还活着!

在"向上"之后按下后退按钮将带来第1册的细节.

如何杀死BookDetailActivity原始AllBooksActivity和我按下的活动之间的所有内容?

mol*_*arm 5

相关指引文章指出以下几点:

实现注意:作为最佳实践,在实现Home或Up时,请确保清除任何后代屏幕的后栈.对于Home,后栈上唯一剩下的屏幕应该是主屏幕.对于向上导航,应从后向堆栈中删除当前屏幕,除非后退导航屏幕层次结构.您可以一起使用FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_NEW_TASK意图标记来实现此目的.

因为你这样做,BookDetailActivity1应关闭FLAG_ACTIVITY_CLEAR_TOP.唯一的方法是,如果它可以活着并按下后退显示它是否会在AllBooksActivity之前启动.

至于不需要FLAG_ACTIVITY_NEW_TASK(由android开发人员的答案建议):

使用此标志时,如果任务已在您正在启动的活动上运行,则不会启动新活动; 相反,当前任务将简单地以最后一个状态被带到屏幕的前面.

...所以如果您的活动存在,它将无法启动新任务.