问题描述
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)