获取viewModel的两种方式

2022-02-09  本文已影响0人  toExploreFuture
private val model: MyViewModel by viewModels()

要使用这中方式,需要添加一下依赖 
implementation "androidx.fragment:fragment-ktx:1.4.1"
implementation "androidx.activity:activity-ktx:1.4.0"
private lateinit var myViewModel: MyViewModel
fun aaa(){
    myViewModel = ViewModelProvider(requireActivity(), ViewModelProvider.NewInstanceFactory()).get(MyViewModel::class.java)
}

经过测试发现第一种方式在不同的fragment 获取的model 对象的内存地址都不一样,导致多fragment 共享数据时出问题
第二种获取的 在不同的fragment 获取的数据是一样的.



ViewModelProvider(保证是同一个 ViewModelStoreOwner,就能保证获取到的viewModle是同一个, ViewModelProvider.NewInstanceFactory()).get(MyViewModel::class.java)

上一篇 下一篇

猜你喜欢

热点阅读