在 Android 活动中设置结果并在父活动在子活动之前完成时在祖父活动中接收

问题描述

我有一个场景

Activity A --> A 为结果启动 Activity B -> B 为结果启动 Activity C 并且 B 完成 --> Activity C 以结果完成 -> Activity A 应该从 C 接收结果。

我认为活动 B 在活动 c 之前完成,活动 A 没有收到结果。

在这种情况下,我们有什么方法可以获得结果,即父在子之前关闭并且结果应该在祖父中

谢谢

解决方法

通常情况下,如果您不指示,活动将不会从后台堆栈中删除。如果发生这种情况,您将不会得到任何结果。在这种情况下,您可以使用回调,但这不是设计应用程序的一种干净的方式。在实施此类事情之前,您必须检查很多事情,以免应用程序崩溃。

,

根据您的方案,请尝试在 C 中设置结果为 OK,然后在 B 的 onActivityResult 中检查该结果,然后从 B onActivityResult 中再次将结果设置为 OK 并完成活动 B,现在您可以在 A onActivityResult 中获得结果方法,但在此过程之间请不要在获得结果之前关闭活动B。

另一种但不推荐的方法,因此您可以通过 C 中的静态变量实现此目的,并在 A 活动的 onstart 方法中进行检查验证,并在使用后使用 null 变量。

希望以上的想法对你有帮助

,

您应该创建一个 ResultContract,将您从活动 A 带到活动 B,然后再创建一个将您从活动 B 带到活动 C。

完成后,您可以在 ActivityC 中设置结果。 当ActivityB收到它时,你必须设置相同的结果,以便ActivityA可以得到它

活动A:
private val aActivityRL= registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
if (result.resultCode == Activity.RESULT_OK) {result.data} }`

aActivityRL.launchIntent(Intent(this,ActivityB::class.java))

活动B:
private val bActivityRL= registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
if (result.resultCode == Activity.RESULT_OK) {setResult(Activity.RESULT_OK,result.data)}
}

bActivityRL.launchIntent(Intent(this,ActiviyC::class.java))

活动C:
setResult(Activity.Result_OK,yourIntentResult)