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

我完全同意下面的导航

在这里输入图像说明

想象一下Book的细节是在BookDetailActivity的不同实例中完成的。

在book2细节中按下之前的堆栈是:

  • BookDetailActivity(Book 2 – 你在这里)
  • BookDetailActivity(Book 1)
  • AllBooksActivity

如果我按照指导方针,我将使用:

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)仍然活着!

在“向上”之后按下返回button将带来书1的细节。

我怎样才能杀掉原来的AllBooksActivity和我按下的活动之间的所有BookDetailActivity

Solutions Collecting From Web of "根据指南处理“向上”导航的正确方法"

相关指南文章指出以下内容:

实现注意事项:最好的做法是,在实现Home或Up时,确保清除任何后代屏幕的后退堆栈。 对于主页,背面堆栈上唯一剩下的屏幕应该是主屏幕。 对于向上导航,当前屏幕应该从后退堆栈中移除,除非后退在屏幕层次结构中导航。 您可以一起使用FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_NEW_TASK意图标志来实现此目的。

既然你这样做,BookDetailActivity1应该由FLAG_ACTIVITY_CLEAR_TOPclosures。 唯一的办法,如果它可以活着,并显示在按下Back是如果它已经开始AllBooksActivity之前。

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

当使用这个标志时,如果一个任务已经开始执行,那么新的活动将不会开始。 取而代之的是,当前的任务将被简单地带到屏幕的最前面的状态。

…所以如果你的活动存在,它不会开始一个新的任务。

好的,有多种方法可以做这样的事情。 这是其中之一:

然而,我build议不要像第一个活动那样打开第一个活动,只要完成当前的活动和之前的活动即可。

为了做到这一点,请用startActivityForResult调用每个新的活动,并将每个活动的结果设置为某个值,表示您希望返回到第一个活动。

您甚至可以将该值设置为类规范名称,并创build一个基本活动来自动处理所有这些请求,以便您不需要处理它。

在任何情况下,我认为你使用Intent.FLAG_ACTIVITY_NEW_TASK犯了一个错误,因为它创build了一个新的任务,所以前一个依然存在。 尝试阅读可用的意图标志了解更多信息: http : //developer.android.com/reference/android/content/Intent.html