三个活动堆栈

时间:2011-04-13 18:30:27

标签: android android-activity workflow-activity activity-stack

我正在试图弄清楚如何实现一个有趣的概念。

假设我的应用程序底部有一个带有3个按钮的栏。我们将它们称为A,B,C。我希望您将这些视为应用程序的3个区域,每个区域都有自己的活动堆栈。

假设我按B,我首先进入主B屏幕。假设此屏幕中有一些功能可以将我带到另一个屏幕,比如列表中特定项目的详细信息。

现在,在详细信息屏幕上,我按下底部的按钮C,然后我将进入主C屏幕。

如果我按B(按后退按钮),我希望用户进入B活动堆栈的最后一个屏幕,这是详细信息屏幕,而不是主B屏幕。

这可能吗?如果我理解正确,我应该有3个任务,1个用于A,1个用于B,1个用于C,是吗?我还需要做什么?

2 个答案:

答案 0 :(得分:0)

实际上,您描述的方案仅包含 ONE 活动堆栈。实际上将存在多少活动堆栈由Android OS控制,我们只能在规则下尽力而为。

根据说明,在BACK为B_main -> B_details -> C_main之后,导航历史为B_main -> B_details。如果在所有这些Activity中实现了这三个按钮(可以通过自定义某个按钮面板并将其包含在布局文件中来完成),那么确实只有一个堆栈。

答案 1 :(得分:0)

当然,实施起来既可行又简单。但是你必须阅读this以了解如何实现它。

您有3个根活动:A_main,B_main,C_main。每项活动都应该开始一项新任务。要做到这一点你需要:

  1. 在你的清单中声明对他们有不同的亲和力:

    活动android:name =“。A_main”android:taskAffinity =“。A”

    活动android:name =“。B_main”android:taskAffinity =“。B”/>

  2. 使用标志启动(切换)任务启动新意图(可以使用ApplicationContext):

    private static final int ROOT_INTENT_FLAG = 
        Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
    
  3. 提供ui机会在您可以使用的任务之间切换,例如安卓菜单。 如果要清除任务 - 只需添加标志Intent.FLAG_ACTIVITY_CLEAR_TOP

    而且......你需要一些LauncherActivity,它将在你的应用程序启动时启动。此活动应恢复上次访问的任务并完成自身。要恢复 - 只需使用带有上面标志的意图(第2项)。