介绍
作为前提,我想在不引入已弃用的 ViewModelProviders.of 和 fragment-ktx 的情况下使用 ViewModel 共享数据。
程序
- 不带参数的 ViewModel
- 当AndroidViewModel(application)被继承且参数为唯一应用时
然后您可以使用 ViewModelProvider 与以下代码轻松共享它。
MainActivity.kt
//FirstFragmentとSecondFragmentと共有
private val viewModel by lazy {
ViewModelProvider(this)[MainViewModel::class.java]
}
第一个片段.kt
//SecondFragmentとMainActivityと共有
private val parentViewModel by lazy {
ViewModelProvider(requireActivity())[MainViewModel::class.java]
}
第二片段.kt
//FirstFragmentとMainActivityと共有
private val parentViewModel by lazy {
ViewModelProvider(requireActivity())[MainViewModel::class.java]
}
如果在activity的this和fargment的requireActivity()中传递给ViewModelProvider的ViewModelStoreOwner是一样的,就可以共享了。
如果 ViewModel 带有参数androidx.lifecycle:lifecycle-*:2.5.0使用添加的InitializerViewModelFactory 创建 viewModelfactory 似乎很容易。
参考
我用java作为参考。
如果可能的话,引入 fragment-ktx 似乎更好。非常简洁
原创声明:本文系作者授权爱码网发表,未经许可,不得转载;
原文地址:https://www.likecs.com/show-308626116.html