我收到了关于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 ?
答案 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**
取决于某些情况评估。我希望