2010-03-17 83 views
7

在我的应用程序中,您可以浏览多个活动,直到活动堆栈非常深。同时关闭几个android活动

我们希望每个活动都有一个按钮,让您直接回到主菜单 - 即弹出除第一个活动以外的所有活动。

我已将该按钮放在视图中,我可以轻松地将它放在应用程序中的每个活动中,但我无法弄清楚如何一次性关闭几个活动。

(如果可能的话,这将是一件好事,如果视图可以工作了多少活动本身关闭 - 即检测堆栈自身的活动是如何深)

回答

16

看一看意图标志它说它将目标活动带到堆栈的顶部,从而移除可能在其之上的所有其他内容。因此,使用该按钮,您可以将其添加到所有活动中,以便启动一个针对主菜单的意图,并设置该标志。

从文档:

如果设置和活动是 推出的 当前任务已在运行,则代替 推出该 活动的新实例,所有其他活动的在其上面的 将被关闭,并且这个 意图将作为新的意图被传递到(现在的 顶部)旧活动。

例如,考虑一个任务 组成的活动:A,B,C,D. 如果d用 意图解析为活动B的组分 调用startActivity(),则C和d将是 成品和B收到给出 意图,导致堆栈现在 点是:a,B.

活动B在上面的例子中当前运行的实例将 要么接受新的意图你是 出发在这里onNewIntent() 方法,或者自己完成并且以新的意图重新开始。如果 已宣布其推出模式为 “多”(默认),你有 没有设置FLAG_ACTIVITY_SINGLE_TOP在 的目的相同,那么这将是 完成并重新创建;对于所有其他 启动模式,或者如果 FLAG_ACTIVITY_SINGLE_TOP设置,则 此Intent将被传送到 当前实例的onNewIntent()。

这次发射模式也可以用来结合 良好的效果与 FLAG_ACTIVITY_NEW_TASK:如果用来 启动任务的根系活力,它 会带来该任务的当前运行 实例的 前景,然后将其清除为其根状态 。例如,在通知 管理器启动 活动时,这是特别有用的,例如 。

+0

会做 - 只是想确保它是完全正确的第一个:我已经被那个之前蜇了... – teedyay 2010-03-17 13:29:42

+1

确实 - 这对我有意想不到的效果:intent.SetFlags(ActivityFlags.ClearTop | ActivityFlags.SingleTop ); – scolestock 2012-01-03 20:39:25

-1

你可以声明第一个活动android:launchMode="singleTask"more),然后用一个Intent启动它。

编辑:我的建议是基于你想有一个活动的单个实例返回到的假设。否则它是不正确的。

+1

在这里建议使用singleTask表示不理解单个任务是干什么的......没关系,它是令人困惑的,它对活动的行为有很大的影响。所以除非你明白并希望它对你做的一切,请避免它。 99%的应用程序只需要使用正常或有时单发启动模式。 – hackbod 2010-03-17 16:56:08