2011-06-16 63 views
9

当我的筹码是在这种情况下:如何管理活动堆栈?

A->B->C 

如果我开始d活动,我想该活动堆栈变为:

A->D 

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

回答

4

这里是将要做的步骤:

  • 来自活动C启动与布尔fromActivityC捆绑在一起的活动A与意图和标记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"); 
    

阿律解决方法,但希望它可以帮助

+0

谢谢,有趣的技巧,它运行...但键盘上键入我有一个想法:当A呼叫B,完成A;当B返回时,重新创建A;当C调用D时,用FLAG_ACTIVITY_CLEAR_TOP创建D。 Yessss! – Michele 2011-06-16 13:32:19

+0

是的,应该工作..但是你不觉得重新创建这样的活动每次都会花费很多cpu周期,并且会破坏活动堆栈的目的..有些事情需要思考:) – Nitin 2011-06-16 13:35:21

1

有点哈克,但在清除栈,然后开始活动D.

活动A 可能消失之前出现了片刻虽然

2

有几种方法,以消除你可以开始一个活动从堆叠中移除活动或防止堆叠:

要从堆栈中移除您的活动,只需拨打finish(),请参阅here

您也可以在清单中实现以下属性:android:noHistory =“true”,它可防止堆叠活动。启动A.当

您的代码应该是这样的Removing an activity from the history stack

1

你可以尝试完成ActivityB当您启动ActivityCActivityC相同:

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

看到这个问题的形式详细

+0

我不能,活性C是一个对话框。如果我在C开始时完成B,我会看到C下的A。 – Michele 2011-06-16 10:22:17

0

基于C的回调,传递消息回到A和ACALL完成启动d,这将结束B和C(因为C是除了B)。

0

这里不取决于A评估Intent内容更好的解决方案: 使用标志FLAG_ACTIVITY_TASK_ON_HOME

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