Android 正确的处理方法;“向上”;按指引航行

Android 正确的处理方法;“向上”;按指引航行,android,android-intent,navigation,back-stack,Android,Android Intent,Navigation,Back Stack,我完全同意下面的导航 假设书籍细节是在BookDetailActivity的不同实例中生成的 第2册详细信息中向上压前的堆叠为: BookDetailActivity(第2册-您在这里) BookDetailActivity(第1册) 全本活动 如果我遵循以下步骤,我将使用: Intent parentActivityIntent = new Intent(this, AllBooksActivity.class); parentActivityIntent.ad

我完全同意下面的导航

假设书籍细节是在BookDetailActivity的不同实例中生成的

第2册详细信息中向上压前的堆叠为:

  • BookDetailActivity(第2册-您在这里)
  • BookDetailActivity(第1册)
  • 全本活动
如果我遵循以下步骤,我将使用:

     Intent parentActivityIntent = new Intent(this, AllBooksActivity.class);
        parentActivityIntent.addFlags(
                Intent.FLAG_ACTIVITY_CLEAR_TOP |
                Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(parentActivityIntent);
        finish();
但是这段代码的一个大问题是BookDetailActivity(第1册)仍然存在

“向上”后按后退按钮将显示第1册的详细信息


我怎样才能杀死原始
AllBooksActivity
和我按下的活动之间的所有
BookDetailActivity
。以下是其中之一:

然而,我建议不要像开始一个新的活动一样开始第一个活动,只需完成当前活动和之前的活动

为此,使用startActivityForResult调用每个新活动,并将每个活动的结果设置为表示希望返回到第一个活动的某个值

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

在任何情况下,我认为您使用Intent.FLAG\u ACTIVITY\u NEW\u TASK都是一个错误,因为它创建了一个新任务,所以前一个任务仍然存在。请尝试阅读可用的意图标志以了解更多信息: 注释如下:

实施说明:作为一种最佳实践,在实施任何一个家庭 或向上,确保清除所有子屏幕的后堆栈。 对于Home,后堆栈上唯一剩下的屏幕应该是 主屏幕。对于向上导航,应删除当前屏幕 从后台堆栈,除非后台在屏幕层次结构之间导航。 您可以使用FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_NEW_任务 意图标志一起实现这一点

既然这样做了,BookDetailActivity1应该在关闭之前关闭。如果它能被激活并在按下按钮时显示,唯一的方法是它是否会在活动之前启动

至于不需要(根据android开发者的回答):

使用此标志时,如果活动的任务已在运行 您现在正在启动,那么新的活动将不会启动; 相反,当前任务将被简单地带到 屏幕上显示它最后一次处于的状态


…因此,如果您的活动存在,它将不会启动新任务。

您考虑过使用片段而不是活动吗?我需要一个不同的活动,因为我希望动画(如果在用户设备上启用)在整个屏幕之间创建一个新的“窗口”和过渡。据我所知,您可以在片段之间进行过渡:,int,int,int)是的,但不是在整个“窗口”之间。。我需要使用不同的活动,是的。对不起,我不明白在您启动了带有标志\活动\清除\顶部的所有BooksActivity之后,BookDetailActivity(第1册)如何仍然有效。它应该消失了。事实上,当您启动该意图时,您的所有活动都应该完成,并且应该创建一个新的AllBooksActivity实例(除非该活动具有launchMode=“singleTop”听起来像是deverOper博客不准确:如果google在他们的帖子中更加开放,我可以在那里评论他们有一个错误:)。我相信这不是唯一的错误。无论如何,你可以检查谷歌和actionBarSherlock的样本,看看它应该如何工作。就新的任务标志而言,你的评论可能是正确的,但为什么要首先添加标志呢?对我来说,这似乎不是一项新任务。可能并非所有情况下都需要它。但如果用户可以从应用程序外部(通过通知、扫描代码等)启动BookDetailsActivity,这是有意义的。请参阅本文中的最后一个示例(在应用程序之间导航以支持共享):