新活动开始时的完成活动

时间:2014-01-28 15:34:39

标签: android android-intent android-activity

假设我有一个这样的活动堆栈(从上到下):

D - C - B - A

因此活动D位于堆栈顶部并且当前正在运行(显示)。

现在,从活动D我想要调用活动B(在堆栈的第二个位置),所以:

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

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

B - D - C - B - A

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

B - A

我如何获得此结果?我可以使用任何FLAG吗?

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

6 个答案:

答案 0 :(得分:2)

这就是FLAG_ACTIVITY_CLEAR_TOP for。

http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TOP

  

例如,考虑一个由活动组成的任务:A,B,C,D。   如果D调用带有解析为的Intent的startActivity()   活动B的组成部分,然后C和D将完成,B接收   给定的Intent,导致堆栈现在为:A,B。

答案 1 :(得分:0)

启动d时可以使用startactivity作为结果,并将意图值发送为“ActivitStarted”,“D”

onresult

检查结果活动发送d如果发送,则再次启动c 检查结果活动发送c如果c发送然后再次开始b 检查结果活动发送b如果b发送然后再次启动

答案 2 :(得分:0)

从“D”调用“C”,使用像

这样的intent变量
Intent intent = new Intent(this, ActivityC.class);
intent.putExtra("BYPASS_ME", true);
startActivity(intent);

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

答案 3 :(得分:0)

你需要使用“startActivityForResult”,然后当你想“调用”活动B时,你实际上“完成”活动D.从那里,检查活动C以查看你接下来应该做什么:

How to manage `startActivityForResult` on Android?

您需要注意在意图中设置数据的部分 - 这将告诉您是否应该完成活动C或其他内容。

RESULT_OK和RESULT_CANCELED不会告诉你太多,也要小心,因为点击“返回”会导致null意图(所以如果意图为null,你不能依赖于检查结果意图的内容) )。

答案 4 :(得分:0)

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

正如Tober所说:

你可以做的就是你在D之前完成C并在拨打下一个时做同样的事。

在我看来,第一个答案与C和D中的呼叫完成相同,但现在在A中,当你的活动进入onPause阶段时。

答案 5 :(得分:0)

这个怎么样

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