介绍

作为前提,我想在不引入已弃用的 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

相关文章: