【发布时间】:2011-09-16 05:29:50
【问题描述】:
当我的堆栈处于这种情况时:
A->B->C
如果我启动 D 活动,我希望活动堆栈变成:
A->D
请注意,活动 C 是一个对话框。
【问题讨论】:
标签: android android-activity stack
当我的堆栈处于这种情况时:
A->B->C
如果我启动 D 活动,我希望活动堆栈变成:
A->D
请注意,活动 C 是一个对话框。
【问题讨论】:
标签: android android-activity stack
以下是所需的步骤:
fromActivityC,与意图和标志 FLAG_ACTIVITY_CLEAR_TOP 捆绑在一起。现在在创建活动 A 时首先检查此布尔值“fromActivityC”,如果存在则启动活动 D,否则正常流程继续。
// following code can be used to get the boolean in the oncreate
boolean entrypoint=this.getIntent().getExtras().getBoolean("fromActivityC");
一个小解决方法,但希望它有所帮助
【讨论】:
有几种方法可以从堆栈中删除一个活动或防止它被堆栈:
要从堆栈中删除您的活动,只需调用finish(),请参阅here。
您还可以在清单中实现属性:android:noHistory="true",以防止 Activity 被堆叠。
更多详情请参阅此问题表:Removing an activity from the history stack
【讨论】:
有点hacky,但您可以在清除堆栈的同时启动活动A,然后启动活动D。
Activity A可能在消失之前出现片刻
【讨论】:
您可以尝试在启动 ActivityC 时完成 ActivityB 并在启动 A 时完成 ActivityC。
您的代码如下所示:
Intent i = new Intent(this.class.ActivityC);
startActivity(i);
ActivityB.finish();
【讨论】:
在回调 C 时,将消息传回 A 并从 Acall finish 开始您的 D,这将完成 B 和 C(因为 C 是 B 的一部分)。
【讨论】:
这里有一个更好的解决方案,不依赖于评估A 中的Intent 内容:
使用标志FLAG_ACTIVITY_TASK_ON_HOME
您还应该看看其他标志Android Intent
【讨论】: