2014-01-28 84 views
0

假如我的活动堆栈像这样(从上到下)整理活动:当新的活动启动

d - ç - B - 一个

因此,活动d是在堆栈的顶部并正在运行(显示)。

现在,从活动DI想调用活动B(在在堆栈中的第二位置),所以:

Intent intent = new Intent(this, ActivityB.class); 
startActivity(intent); 

此操作后,堆栈的新配置,现在应该是:

乙 - d - ç - B - 一个

但我真正想要的是下面的堆栈配置:

乙 - 一个

如何获得此结果?有没有可以用于此的FLAG?

总结我希望当我开始活动B(从D)时,D和C都自动完成。

+0

我的应用程序也允许从D回到C,所以如果我遵循你的建议,我不能回到C – GVillani82

回答

0

开始d时,你可以使用startactivity的结果,并发送意图值“ActivitStarted”,“d”

onresult

检查结果活动送d,如果d送然后重新启动C 检查结果活动送c如果c。发送再次入门C 检查结果活动发送b如果b分别发送然后重新启动

0

呼叫“C”,从“d”,与像

一个意图变量3210

在ActivityC.java中,获取intent值,如果其为true,则完成活动。现在C将从堆栈中移除。

0

你需要使用“startActivityForResult”,然后当你想“呼”活动B你实际上是“完成”的活动D.从那里,做活动℃的检查,看看你接下来应该做的:

How to manage `startActivityForResult` on Android?

您将要注意的地方,你设置你的意图的数据部分 - 这会告诉你,如果你要完成的活动C或别的东西。

RESULT_OK和RESULT_CANCELED不会告诉你很多,也要小心,因为点击“返回”可能会导致一个空的意图(所以你不能依靠检查结果意图的内容,如果意图是空值)。

+0

这可能是最好的解决方案,但它只有在“Activity C”是唯一的开始“活动D”的方式。如果你有其他'Activity X'启动'Activity D',你将不得不在那里实现相同的逻辑。 –

+0

为真。我正在回答这个问题(提供堆栈顺序) – Jim

0

不幸的是,没有标志可以满足您的要求。

正如Tober说:

你可以做的是您刚才d前完成C和调用在下单时做的一样。

在我看来,第一个答案与C和D中的打电话完成一样,但现在在A中,当您的活动进入onPause阶段时。

0

这样如何

Intent intent = new Intent(this, ActivityB.class); 
startActivity(intent); 
finish();