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
相关产品推荐
相关产品推荐

