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

Android 如何通过多个活动返回结果,android,android-activity,android-intent,handler,Android,Android Activity,Android Intent,Handler,在我的应用程序的某些部分中,有如下活动结构: 活动A是我的家庭活动,每次流程或流程结束后我都会回来。 活动B是一项简单的确认活动。 活动C是另一项确认活动。 活动D进行一些处理,最后将结果返回到我的家庭活动(活动A)。 要求: 活动B和C: 必须存在,并且不能合并为一个 单击“取消”按钮时,它将调用finish(),但不执行任何操作 单击OK按钮后,它将跟随流程,当前活动将调用finish() 问题: 我曾考虑使用startActivityForResult(),但我从未使用它通过多个活动

在我的应用程序的某些部分中,有如下活动结构:

活动A
是我的家庭活动,每次流程或流程结束后我都会回来。
活动B
是一项简单的确认活动。
活动C
是另一项确认活动。
活动D
进行一些处理,最后将结果返回到我的家庭活动(
活动A
)。

要求:
活动B
C

  • 必须存在,并且不能合并为一个
  • 单击“取消”按钮时,它将调用
    finish()
    ,但不执行任何操作
  • 单击OK按钮后,它将跟随流程,当前活动将调用
    finish()
问题: 我曾考虑使用
startActivityForResult()
,但我从未使用它通过多个活动传递结果。
我还想传递一个
处理程序(在
活动a
中创建),它在
活动a
上调用一些方法,并在
活动D
上执行。…


我如何实现它呢?

您可以将B和C作为从A启动的对话框来执行,并且只有在B和C都正常的情况下,您才能使用
startActivityForResult()

非常好的格式运行D。您可以(也可能应该)明确地从活动A、B和C中调用
startActivityForResult()
(不要立即
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();
    }
}
如果希望B和C消失,请执行以下操作:

    @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    setResult(resultCode, data);
    finish();
}

您可能希望在启动活动B和C时使用中所述的意图标志标志活动前进结果

公共静态最终整数标志\u活动\u前进\u结果

自:API级别1

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


这样,A就可以在从D发回的额外数据中提取任何发回的数据。我知道这是一个非常古老的问题,但我想提出一个有效的解决方案,使用
onNewIntent()
,并将其视为
onActivityResult()

在活动D中,你将把你的意图组织为

Intent intent = new Intent(yourContext, Activity_A.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("someName", data);
startActivity(intent);
finish();
然后在活动A中

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    // update your UI
    intent.getSerializableExtra(...
}

这个实现是正确的,但我确实需要这些活动来解除锁定(以防止按下后退按钮)。在我的例子中,@NickT描述的方式更容易实现。您如何确定您的活动B是从哪个
requestCode
开始的?我用几个请求代码从A启动B(例如,如果我想修改或添加一个新条目,它是相同的活动B,但请求代码不同)。那么,我如何从活动B开始到活动C?这只有在中间活动完成()的情况下才有效。如果B或C未完成(),则不会调用A的onActivityResult()方法。无论中间活动是否完成(),链接startActivityForResult()和onActivityResult()都会起作用。这很好!谢谢分享。我完成()调用startActivity()后的中间活动,目的是包含该标志。我也面临上述问题,有两个应用程序有多个活动。请参考和回答..我也面临上述问题与多个活动的两个应用程序。如有可能,请参考并回复