如何通过多个活动返回结果

jal*_*039 47 android handler android-intent android-activity

在我的应用程序的某些部分,有一个这样的活动结构:

在此输入图像描述

Activity A是我的家庭活动,我在每个流程或流程后回来.
Activity B是一个简单的确认活动.
Activity C是另一项确认活动.
Activity D做一些过程,最后它将结果返回到我的家庭活动(Activity A).

要求:

Activity B并且C:

  • 必须在那里,不能合并在一起.
  • 当它点击取消按钮时,它会调用finish()并且什么都不做.
  • 当单击OK按钮时,它跟随流和当前活动调用 finish()

题:

我正在考虑使用startActivityForResult()但我从来没有用过它来通过多个活动传递结果.
我还想通过一个handler(创建Activity A)调用一些方法Activity A并执行Activity D...

我怎么能实现它?

Nic*_*ckT 60

您可能希望使用意图标志FLAG_ACTIVITY_FORWARD_RESULT,如Intent启动活动B和C时所述

public static final int FLAG_ACTIVITY_FORWARD_RESULT

自:API级别1

如果设置并且此意图用于从现有活动启动新活动,则现有活动的回复目标将转移到新活动.这样,新活动可以调用setResult(int)并将结果发送回原始活动的回复目标.

这样A应该收到从D发回的额外内容中发回的任何数据

  • 这仅在中间活动完成()的过程中有效.如果B或C未完成(),则不调用A的onActivityResult()方法.无论中间活动是否完成(),链接startActivityForResult()和onActivityResult()都有效. (14认同)

Bri*_*uis 10

是的,很棒的格式.你可以 - 并且可能应该 - startActivityForResult()从活动A,B和C中调用(并且不要finish()马上).在B和C中,您可以检查成功的结果finish(),并将结果传回A.

    @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if((resultCode == RESULT_OK) && (requestCode == MY_RESULT_CODE)) {
        setResult(RESULT_OK, data);
        finish();
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您希望B和C无论如何都消失,请执行以下操作:

    @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    setResult(resultCode, data);
    finish();
}
Run Code Online (Sandbox Code Playgroud)