在我的应用程序中,您可以浏览多个活动,直到活动堆栈非常深。
我们希望每个活动上都有一个按钮,可以直接返回主菜单 - 即从第一个活动中弹出所有活动。
我已将按钮放在View中,我可以轻松地将其放在应用程序中的每个Activity上,但我无法弄清楚如何一举关闭几个活动。
(如果可能的话,如果View可以计算出自己关闭多少个活动,那就好了 - 也就是检测它自己的Activity有多深。)
答案 0 :(得分:16)
查看意图标记FLAG_ACTIVITY_CLEAR_TOP
,它表示它将目标活动带到堆栈顶部,删除其上可能存在的所有其他内容。因此,使用您可以添加到所有活动的按钮来启动针对主菜单的意图,并设置该标记。
来自文档:
如果设置,则活动正在进行 推出已经在运行了 当前任务,然后而不是 启动一个新的实例 活动,所有其他活动 它将被关闭 意图将交付给(现在 在顶部)旧活动作为一个新的意图。
例如,考虑一项任务 由以下活动组成:A,B,C, D.如果D用一个调用startActivity() 解析为组件的意图 活动B,那么C和D将是 完成后,B收到给定的 意图,现在导致堆栈 存在:A,B。
当前正在运行的实例 上例中的活动B将会 要么接受你的新意图 从这里开始onNewIntent() 方法,或自己完成和 用新意图重新启动。如果它 已宣布其发射模式为 “多个”(默认),你有 没有设置FLAG_ACTIVITY_SINGLE_TOP 同样的意图,那就是 完成并重新创建;为了所有其他 发射模式或如果 然后设置FLAG_ACTIVITY_SINGLE_TOP 这个意图将被传递给 当前实例的onNewIntent()。
此启动模式也可用于 结合良好的效果 FLAG_ACTIVITY_NEW_TASK:如果习惯的话 它启动任务的根活动 会带来任何正在运行的 该任务的实例 前景,然后清除它 根状态。这特别有用, 例如,启动时 来自通知的活动 管理器。
答案 1 :(得分:-1)
您可以声明第一个活动android:launchMode="singleTask"
(more),然后以意图启动它。
编辑:我的建议是基于您希望将单个Activity实例返回的假设。否则它是不正确的。