查看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每次我调用它,这不是我所追求的。

有什么想法是替换上面已弃用的代码?


当前回答

你可以用这个代替:

viewModel= ViewModelProvider(this).get(YourViewModel::class.java)

括号中的"this"是YourViewModel实例的所有者。

其他回答

如果你在Udacity上看了一个视频,你创建了一个GameViewModel,你不想写过时的代码,只需替换:

viewModel = ViewModelProviders.of(this).get(GameViewModel::class.java)

使用以下代码:

viewModel = ViewModelProvider(this).get(GameViewModel::class.java)
  

并尽快返回阅读!!

直接使用ViewModelProvider,而不是像文档中提到的那样使用ViewModelProviders.of()。

ViewModelProvider(this).get(XViewModel::class.java)

https://developer.android.com/reference/androidx/lifecycle/ViewModelProviders

ViewModelProviders.of()已弃用。

直接使用ViewModelProvider构造函数,因为它们现在处理默认的ViewModelProvider。工厂的角色。

 mainActivityViewModel = new ViewModelProvider(this).get(MainActivityViewModel.class);

你可以用这个代替:

viewModel= ViewModelProvider(this).get(YourViewModel::class.java)

括号中的"this"是YourViewModel实例的所有者。

从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)