启动多个活动的startActivityForResult用法

10

我使用 startActivityForResult 方法来启动两个活动,代码如下:

Activity A -> startActivityForResult(ActivityB,0) 
 -> Activity B -> setresult(10); finish();
 -> Activity A -> if(result==10) {
    dofunction();
 }

但我必须将这个逻辑用于4个或更多的活动。

 Activity A -> startActivityForResult(ActivityB,0) 
 -> Activity B -> finish();
 -> Activity C -> finish(); 
 -> Activity D -> setresult(10); finish();
 -> Activity A -> if(result==10) {
   dofunction(); 
}

但是这并不起作用。

2个回答

51

解决方案:

Activity A -> startActivityForResult(activityB,0);
Activity B -> activityCintent.setFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT); startActivity(activityCintent); finish();
Activity C -> activityDintent.setFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT); startActivity(activityDintent); finish();
Activity D -> setresult(10); finish();
Activity A -> if(result==10) {dofunction(); } YEPPP

这是FLAG_ACTIVITY_FORWARD_RESULT的逻辑。首先,您启动一个带有结果的活动,新活动将此意图发送到另一个新活动,直到您设置结果。我希望这对于遇到相同问题的人有所帮助。


1
这会将B、C、D保留在活动返回堆栈中,直到结果被设置吗? 还是它会立即完成当前活动,当下一个活动开始时? - atablash

1
startActivityForResult(ActivityB,0)中,我们为指定的活动命名活动,并提供请求代码,即startActivityForResult(ActivityB,REQUEST_CODE_FOR_ACTIVITYB),其中请求代码是任意整数。然后在onActivityResult中检查每个请求代码并实现您的逻辑。

1
如果您需要任何参考,请查看http://www.vogella.com/tutorials/AndroidIntent/article.html - NIPHIN
2
每个活动都必须指定一个“唯一”的请求代码。 - NIPHIN
1
好的,请解释一下你的情况...现在我猜想你需要从A启动Activity B,并且当activityD有一些结果时,将其返回到activity A?如果是这种情况,你能否从activityD开始一个全新的activityA并使用获得的结果? - NIPHIN
当我启动新的活动a时,如果用户按下返回按钮,应用程序将返回旧的活动a,并会看到已删除的记录。 - sipdorus
1
在除了ActivityA之外的Fragment中替换Activities,然后在Fragment C完成任务后,使用ActivityA的ListAdapter调用notifyDataSetChanged。 - NIPHIN
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接