如何通过多个活动返回结果
在我的应用程序的某些部分有一个这样的活动的结构:
Activity A
是我的家庭活动,在每一个stream程或stream程之后,我都会回来。
Activity B
是一个简单的确认活动。
Activity C
是另一个确认活动。
Activity D
做了一些过程,最终它将结果返回到我的家庭活动( Activity A
)。
要求:
Activity B
和C
:
- 必须在那里,不能合并成一个。
- 当它被点击取消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,