You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

有中间Activity时,如何通过ActivityResultContract让Activity获取结果?

用Activity Result API实现结果直接转发(替代FLAG_ACTIVITY_FORWARD_RESULT)

针对你在迁移startActivityForResult到Activity Result API时遇到的问题——Activity A无法接收Activity C的返回结果,以下是适配新API的解决方案,核心是保留原FLAG_ACTIVITY_FORWARD_RESULT的逻辑并结合新API特性调整:

基础实现(直接转发)

这种方式完全对应旧逻辑,B启动C后直接销毁,结果跳过B直达A:

1. Activity A 配置结果接收器

A需要注册ActivityResultLauncher来接收最终结果,正常启动B即可:

// Activity A 代码
private val resultLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
    if (result.resultCode == RESULT_OK) {
        val data = result.data
        // 处理来自C的返回数据
    }
}

// 启动Activity B的方法
fun navigateToB() {
    val intent = Intent(this, ActivityB::class.java)
    resultLauncher.launch(intent)
}

2. Activity B 启动C并转发结果

B不需要自己注册结果接收器,直接启动C并设置转发标记,随后立即销毁自身:

// Activity B 代码
fun navigateToC() {
    val intent = Intent(this, ActivityC::class.java)
    // 添加转发结果标记,让C的结果直接返回给启动B的组件(即A)
    intent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT)
    startActivity(intent)
    // 必须调用finish,否则B会留在返回栈,结果会先到B而非A
    finish()
}

3. Activity C 返回结果

C正常设置结果并销毁即可,无需额外处理:

// Activity C 代码
fun sendResultBack() {
    val resultIntent = Intent().apply {
        putExtra("result_key", "来自C的返回值")
    }
    setResult(RESULT_OK, resultIntent)
    finish()
}

进阶实现(B需预处理结果时)

如果B需要先处理C的结果再传递给A,可以用手动转发的方式:

// Activity B 代码
private val cResultLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
    // 将C的结果原封不动(或处理后)返回给A
    setResult(result.resultCode, result.data)
    finish()
}

fun navigateToC() {
    val intent = Intent(this, ActivityC::class.java)
    cResultLauncher.launch(intent)
}

这种方式不需要设置FLAG_ACTIVITY_FORWARD_RESULT,适合B需要对C的结果做中间处理的场景。

排查A收不到结果的常见原因

  • B启动C后未调用finish():B留在返回栈,C的结果会先返回给B,若B未处理则A收不到。
  • B调用了setResult():会覆盖转发流程,A收到的是B的结果而非C的。
  • 未正确添加Intent.FLAG_ACTIVITY_FORWARD_RESULT标记:转发逻辑不生效,结果仍返回给B。

内容的提问来源于stack exchange,提问作者codemonkey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 15:26:07