如何管理活动堆栈?

时间:2011-06-16 09:44:57

标签: android android-activity stack

当我的筹码处于这种情况时:

A->B->C

如果我启动D活动,我希望活动堆栈变为:

A->D

请注意,活动C是一个对话框。

6 个答案:

答案 0 :(得分:4)

以下是执行所需操作的步骤:

    来自活动C的
  • 启动活动A,其中包含与意图捆绑在一起的布尔fromActivityC并设置了标志FLAG_ACTIVITY_CLEAR_TOP
  • 现在在活动的创建中首先检查此布尔值“fromActivityC”,如果存在则启动活动D否则正常流程继续。

    // following code can be used to get the boolean in the oncreate
    boolean entrypoint=this.getIntent().getExtras().getBoolean("fromActivityC");
    

一个小解决方法,但希望它有所帮助

答案 1 :(得分:2)

有几种方法可以从堆栈中删除活动或阻止它堆叠:

要从堆叠中移除您的活动,只需致电finish(),请参阅here

您还可以在清单中实现以下属性:android:noHistory =“true”,用于阻止活动堆叠。

更详细地查看此问题:Removing an activity from the history stack

答案 2 :(得分:1)

有点hacky,但你可以在清理堆栈时启动活动A,然后启动活动D.

活动A 可能会出现片刻,然后消失

答案 3 :(得分:1)

您可以在启动ActivityB时尝试完成ActivityC,并在启动A时尝试在ActivityC中完成相同的操作。

您的代码如下所示:

Intent i = new Intent(this.class.ActivityC);
startActivity(i);
ActivityB.finish();

答案 4 :(得分:0)

在回调C时,将消息传回A并从Acall结束开始你的D,这将完成B和C(因为C是B的一部分)。

答案 5 :(得分:0)

这是一个更好的解决方案,不依赖于评估Intent中的A内容: 使用标记FLAG_ACTIVITY_TASK_ON_HOME

你还应该看看其他标志Android Intent