完成后未调用OnActivityResult

时间:2014-01-20 14:13:08

标签: android android-activity

我有一系列的多项活动,在某些时候我想进入我的应用程序的不同部分,而且我不想在堆栈中使用之前的活动。 它是这样的:Actvity A - >活动A1 - >活动A2 - >活动A3 - >活动B

当我开始活动B时,我想关闭所有的As活动。

最简单的方法我认为是setResult然后是finish最后一个活动,而在之前的活动中查找结果并在传递相同数据后关闭活动。< / p>

在开始B之前我setResult然后finish A3。

问题是A3已经完成,但在A2上没有调用onActivityResult,直到我关闭B以便A2应该恢复。

我认为如果在其上启动另一个活动,onActivityResult无法传播到多个活动。

然后我被阻止了。我不知道自己该做什么,或者是否有其他办法可以同时关闭多重活动。

3 个答案:

答案 0 :(得分:4)

您必须使用startActivityForResult()启动所有A的活动。当你开始活动B时, setResult in A3 and finish A3。 A3完成后,将调用A2 onActivityResult(),setResult并完成它。 A2完成后,A1的onActivityResult将被调用。现在,对关闭活动的结果做任何你想做的事。

或者你可以在完成A的所有子活动后从A开始B.

答案 1 :(得分:1)

一次只能激活一个活动,所以当你完成A3并且无法调用现在激活到A2的启动B时。

此解决方案将移至ActivityA onActivityResult中的B.

完成所有其他活动,并在第一个活动onActivityResult启动B并完成。

如果您使用的是API 11及更高版本,则可以设置如下标记:

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                | Intent.FLAG_ACTIVITY_CLEAR_TASK);

当你开始ActivityB时。这将完成ActivityB之前的所有活动。

答案 2 :(得分:-2)

假设您已经开始活动A1,并且从A1开始A2,当你想从A2开始A3时,

 finish();
setResult(0);

那么A1的诞生将在那里被称为检查

如果是的话         resultCode为== 0         完() 然后开始A3