查看ViewModel的谷歌文档,他们展示了下面如何获取ViewModel的示例代码:
val model = ViewModelProviders.of(this).get(MyViewModel::class.java)
当使用最新的依赖项android.arch.lifecycle:extensions:1.1.1时,没有这样的类ViewModelProviders。
去查看ViewModelProviders的文档,我看到一条评论说:
这个类在API级别1.1.0中已弃用。使用ViewModelProvider。AndroidViewModelFactory
问题是,当尝试使用ViewModelProvider时。AndroidViewModelFactory,找不到一个等效的方法来获取ViewModel的实例。
我尝试做的事情:
ViewModelProvider.AndroidViewModelFactory.getInstance(application).create(PlayerViewHolder::class.java)
因此,方法的名称创建,我得到一个新的实例的ViewModel每次我调用它,这不是我所追求的。
有什么想法是替换上面已弃用的代码?
从2.2.0开始。生命周期扩展已弃用。请参考谷歌文档。
这是这一页的剪接:
生命周期扩展中的api已弃用。相反,添加
您所需要的特定生命周期工件的依赖关系。
新的库包括:
// ViewModel and lifecycle support for java
implementation "androidx.lifecycle:lifecycle-viewmodel:${versions.lifecycle}"
implementation "androidx.lifecycle:lifecycle-livedata:${versions.lifecycle}"
// ViewModel and lifecycle support for kotlin
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:${versions.lifecycle}"
implementation "androidx.lifecycle:lifecycle-livedata-ktx:${versions.lifecycle}"
JAVA的新代码:
viewModel = new ViewModelProvider(this).get(MyViewModel.class);
或者对于Kotlin来说:
viewModel = ViewModelProvider(this).get(MyViewModel::class.java)
这个答案是针对Java的,但你可以理解要点。解决方案是你需要使用ViewModelProvider,因为ViewModelProviders已弃用:
//Do not forget import it.
import androidx.lifecycle.AndroidViewModel;
ViewModelProvider.AndroidViewModelFactory(getApplication()).create(YourViewModel.class);
示例用法如下:
YourViewModel yourViewModel = new ViewModelProvider.AndroidViewModelFactory(getApplication()).create(YourViewModel.class);
另外,不要忘记更新Gradle Dependencies:查看它们的最新版本
implementation 'androidx.lifecycle:lifecycle-viewmodel:2.2.0'
annotationProcessor 'androidx.lifecycle:lifecycle-compiler:2.2.0'
! !然而,要小心,因为一些答案推荐了这个解决方案,但对我来说并不管用:
yourViewModel = new ViewModelProvider(this).get(YourViewModel.class);
因为当我使用这种方式时,我得到了下面的错误消息:
导致原因:java.lang.RuntimeException:不能创建类com. canerkasler .mvvmexample. viewmodel的实例