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

非父组件场景下Fragment向Activity传递taskId失败求解决方案

问题:向非父组件的Activity传递taskId失败

需要从Fragment向非其父组件的Activity传递特定的taskId,但数据传递失败。

已尝试方案

  • 使用Intent传递数据
  • 使用Bundle传递数据
  • 接口(仅当Activity是Fragment父组件时才认为接口有效)
  • SharedViewModel
  • 使用LocalBroadcastManager传递数据

推测核心问题在于生命周期。在Fragment中,可通过以下方式正常获取数据:

mTaskContext = (activity as TaskActivityInterface).taskContext
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
    when (item?.itemId) {
        R.id.barcode_icon -> showScanActivity()
    }
    return super.onOptionsItemSelected(item)
}

Intent传递失败情况

尝试通过Intent启动TransferScanActivity并附加数据,但Activity中接收的值为null(Fragment中该值非空),相关代码:

private fun showScanActivity() {
    startActivity(Intent(context, TransferScanActivity::class.java))
}

LocalBroadcastManager传递失败情况

尝试LocalBroadcastManager方案,调试显示数据已正常发送,但Activity中注册广播接收器后无法接收到数据。

Fragment中的发送代码:

private fun showScanActivity() {
    sendDataToActivity(mTaskContext.id)
    startActivity(Intent(context, TransferScanActivity::class.java))
}


private fun sendDataToActivity(data: Long) {
    val intent = Intent("SEND_TASKID")
    intent.putExtra("TASK_ID", data)
    LocalBroadcastManager.getInstance(requireContext()).sendBroadcast(intent)
}

Activity中的广播接收器代码:

private val mTaskIdBroadcastReceiver = object : BroadcastReceiver() {
    override fun onReceive(context: Context?, intent: Intent?) {
        Log.d("TaskIdA", "Received broadcast")
            val data = intent?.getLongExtra("TASK_ID", 0)
            Log.d("TaskIdA", "onReceive: $data")
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 07:57:40