看着谷歌文档 https://developer.android.com/topic/libraries/architecture/viewmodel for ViewModel
,他们展示了下面的示例代码,说明如何获得ViewModel
:
val model = ViewModelProviders.of(this).get(MyViewModel::class.java)
当使用最新的依赖时android.arch.lifecycle:extensions:1.1.1
没有这样的类ViewModelProviders
.
去文档 https://developer.android.com/reference/android/arch/lifecycle/ViewModelProviders for ViewModelProviders
,我看到一条评论说:
此类在 API 级别 1.1.0 中已弃用。使用 ViewModelProvider.AndroidViewModelFactory
问题是,当尝试使用ViewModelProvider.AndroidViewModelFactory
,找不到等价物of
方法来获取实例ViewModel
.
我尝试做什么:
ViewModelProvider.AndroidViewModelFactory.getInstance(application).create(PlayerViewHolder::class.java)
因此该方法的名称create
,每次调用 ViewModel 时我都会得到一个新实例,这不是我想要的。
有什么想法可以替换上面已弃用的代码吗?
我使用生命周期扩展2.2.0
版本:
implementation "androidx.lifecycle:lifecycle-extensions:2.2.0"
它应该可以工作,使用ViewModelProvider
构造函数。
// With ViewModelFactory
val viewModel = ViewModelProvider(this, YourViewModelFactory).get(YourViewModel::class.java)
//Without ViewModelFactory
val viewModel = ViewModelProvider(this).get(YourViewModel::class.java)
2020/5/15 更新
我找到了另一种优雅的方式来实现这一点,Android KTX 可以提供帮助
implementation "androidx.fragment:fragment-ktx:1.2.4"
val viewmodel: MYViewModel by viewModels()
val viewmodel: MYViewModel by viewModels { myFactory } //With factory
Ref: https://developer.android.com/reference/kotlin/androidx/fragment/app/package-summary#viewmodels https://developer.android.com/reference/kotlin/androidx/fragment/app/package-summary#viewmodels
2020/06/25:更正了代表的情况
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)