获取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)