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

Kotlin中能否从Activity1的Fragment跳转到Activity2并回传选中数据?

实现方案

这个流程完全可以实现,以下是基于Kotlin的两种主流实现方案,可根据项目适配情况选择:

方案一:官方推荐 Activity Result API(AndroidX 1.2.0 及以上版本支持,优先使用)

步骤1:在Fragment1中注册返回结果接收器

将以下代码作为类成员定义在Fragment1内:

private val startForResult = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
    if (result.resultCode == Activity.RESULT_OK) {
        // 取出Activity2回传的数据,根据实际数据类型修改取值方法
        val selectedData = result.data?.getStringExtra("SELECTED_DATA_KEY")
        selectedData?.let {
            // 此处编写拿到数据后的业务逻辑,比如更新UI
        }
    }
}

步骤2:Fragment1触发跳转打开Activity2

在跳转触发逻辑(比如按钮点击回调)中添加如下代码:

val intent = Intent(requireActivity(), Activity2::class.java)
// 如果需要给Activity2传前置参数,也可以在这里给intent putExtra
startForResult.launch(intent)

步骤3:Activity2点击Select按钮回传数据

在Activity2的「Select」按钮点击回调中添加如下代码:

binding.btnSelect.setOnClickListener {
    // selectedContent替换为用户实际选中的条目数据
    val selectedContent = "用户选中的条目内容"
    val resultIntent = Intent().apply {
        putExtra("SELECTED_DATA_KEY", selectedContent)
        // 如果需要传递复杂对象,让对象实现Parcelable接口后调用putParcelableExtra即可
    }
    setResult(Activity.RESULT_OK, resultIntent)
    finish() // 关闭Activity2返回上一级
}

方案二:onActivityResult 兼容方案(仅老项目适配使用,该方法已被官方废弃)

步骤1:Fragment1重写onActivityResult接收回传数据

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    // 1001为自定义请求码,保证和跳转时的请求码一致即可
    if (requestCode == 1001 && resultCode == Activity.RESULT_OK) {
        val selectedData = data?.getStringExtra("SELECTED_DATA_KEY")
        selectedData?.let {
            // 处理业务逻辑
        }
    }
}

步骤2:Fragment1触发跳转

val intent = Intent(requireActivity(), Activity2::class.java)
startActivityForResult(intent, 1001)

步骤3:Activity2回传逻辑和方案一完全一致

注意事项

  • 两端存取数据使用的key需要完全一致,避免出现拿不到数据的问题
  • 传递复杂对象优先实现Parcelable接口,性能远高于Serializable
  • 禁止使用全局变量存储回传数据,容易引发内存泄漏,也不符合Android组件通信规范
  • 存在多个不同的回传场景时,给每个场景单独定义不同的Result launcher或请求码即可

内容的提问来源于stack exchange,提问作者마카롱

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 05:15:05