Activity.finish()& startActivityForResult()相互协作?

时间:2010-11-12 07:20:13

标签: android android-activity

我收到了关于Activity.finish()的问题。

在我的Android代码中,有4项活动( A B C D )。启动活动 A 会调用startActivityForResult(intent, reqCode)来启动活动 B B 启动 C ,然后finish(),而不是等待结果。 C B 完全相同,开始 D ,然后是finish() D 会按setResult(resultCode)返回一些结果。

当我的代码运行且活动 D 会返回一些结果时, A 会在RESULT_CANCELED上抓住onActivityResult(),即使{{1} }在 D 中返回。我猜RESULT_OK来自活动 B ,已在 D 返回结果之前终止,而不是来自 D

但是,我的问题是,为什么 D 之后的活动 A 捕获RESULT_CANCELED会返回一些结果,而不是在 B 之后立即被终止了?而且,我应该怎样做才能使 A 捕获 D 的结果?我是否必须保持 B C ,将结果从 D 传递到 A

3 个答案:

答案 0 :(得分:3)

根据您的解释,我了解活动 A 开始 B 开始 C C 开始 d

开始 C 后,

B 会调用finish() C 也会这样做。

由于 B 已由 A 启动,因此它将等待 B 的结果,因为 A 没有链接到 D ,即使 D 返回某些结果也没关系。

如果您想要RESULT_OK A 中的onActivityResult(),则必须从 B 收到有效结果。 为此,您必须在 C 中收到 D 的结果,然后将其传递给 B ,然后从 B 传递给它到 A

您可以在通过Intent将结果传回各自的通话活动后,在 B finish() C 中调用onActivityResult()

我想,我理解你的问题了。如果错了,请原谅我。

答案 1 :(得分:1)

使用标记Intent.FLAG_ACTIVITY_FORWARD_RESULT开始活动 B C

答案 2 :(得分:0)

愿这不太明智, 但是你为什么不**set result of B and C to RESULT_OK**取决于某些情况评估。我希望