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

Android Kotlin使用ViewModel跨Fragment传值无显示问题求助

问题核心原因

你两个Fragment获取的HomeViewModel不属于同一个实例,所以数据无法互通:

  • HomeFragment初始化ViewModel时传入的是requireActivity(),拿到的是绑定宿主Activity生命周期的全局共享ViewModel实例
  • InfoFragment初始化ViewModel时传入的是this,拿到的是仅绑定InfoFragment自身生命周期的独立实例,和HomeFragment的ViewModel完全没有关联,自然收不到它设置的值

修复方案

修改InfoFragment的onViewCreated方法中ViewModel初始化逻辑,和HomeFragment保持一致,使用Activity作为ViewModel的作用域:

// 从ViewModel中读取数据
homeViewModel = ViewModelProvider(requireActivity()).get(HomeViewModel::class.java)
homeViewModel.text.observe(viewLifecycleOwner, Observer {
    binding.infoFragmentTextView.text = it
})

其他可选检查项

  • 确保你点击按钮后是先执行homeViewModel.setText(valueFromHome)逻辑,再执行跳转到InfoFragment的操作,避免跳转后才赋值导致首次进入页面收不到值
  • 如果后续你需要在子线程给LiveData设值,请使用postValue方法,主线程设值用setValue(你当前代码是在主线程点击回调里赋值,无需修改)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 12:48:03