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

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

在这里输入图像说明

Activity A是我的家庭活动,在每一个stream程或stream程之后,我都会回来。
Activity B是一个简单的确认活动。
Activity C是另一个确认活动。
Activity D做了一些过程,最终它将结果返回到我的家庭活动( Activity A )。

要求:

Activity BC

  • 必须在那里,不能合并成一个。
  • 当它被点击取消button时,它会调用finish()并不执行任何操作。
  • 当点击确定button时,按照stream程和当前活动调用finish()

题:

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

我怎么能实现它?

您可能想要在启动活动B和C时使用Intent中所述的意向标志FLAG_ACTIVITY_FORWARD_RESULT

公共静态最终诠释FLAG_ACTIVITY_FORWARD_RESULT

因为:API级别1

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

这样A应该拿起从D发回的额外资料中的任何数据

是的,伟大的格式。 你可以 – 也许应该 – 从每个活动A,B和C(而不是finish()立即)调用startActivityForResult() )。 在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当做从A触发的对话框,只有B和C都可以,你用startActivityForResult()运行D,