7

我完全同意下面的导航

在此处输入图像描述

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

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

  • BookDetailActivity (Book 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(Book 1)还活着!

在“向上”之后按返回按钮将显示第 1 册的详细信息。

我怎样才能杀死原始和我按下的活动BookDetailActivity之间的所有内容?AllBooksActivity

4

2 回答 2

5

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

实施注意事项:作为最佳实践,在实施 Home 或 Up 时,请确保清除所有后代屏幕的后台堆栈。对于 Home,后堆栈上唯一剩余的屏幕应该是主屏幕。对于向上导航,当前屏幕应该从后退堆栈中移除,除非后退导航跨屏幕层次结构。您可以一起使用 FLAG_ACTIVITY_CLEAR_TOP 和 FLAG_ACTIVITY_NEW_TASK 意图标志来实现此目的。

既然你这样做了, BookDetailActivity1 应该由 FLAG_ACTIVITY_CLEAR_TOP关闭。如果它可以活着并在按下 Back 时显示,唯一的方法是它是否会在 AllBooksActivity 之前启动。

至于不需要FLAG_ACTIVITY_NEW_TASK(由android developer 's answer建议):

使用此标志时,如果您现在正在启动的 Activity 已经在运行任务,则不会启动新的 Activity;相反,当前任务将简单地以其上次所处的状态被带到屏幕的前面。

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

于 2013-01-04T07:43:56.777 回答
1

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

但是,我建议不要像打开新活动一样打开第一个活动,只需完成当前活动和之前的活动即可。

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

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

无论如何,我认为您使用 Intent.FLAG_ACTIVITY_NEW_TASK 犯了一个错误,因为它创建了一个新任务,所以前一个任务仍然存在。尝试阅读可用的意图标志以获取更多信息:http: //developer.android.com/reference/android/content/Intent.html

于 2012-12-29T15:20:54.973 回答