假设我有一个这样的活动堆栈(从上到下):
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都会自动完成。
答案 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();