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

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


当前回答

如果你使用Kotlin,你可以像这样使用属性委托viewModels():

val viewModel: YourViewModel by viewModels()

来源:https://forums.bignerdranch.com/t/solution-to-deprecated-method-viewmodelproviders-of/16833

其他回答

我用的是工厂。

ViewModelProvider.AndroidViewModelFactory
            .getInstance(getApplication())
            .create(DashboardViewModel.class);

如果你使用Kotlin,你可以像这样使用属性委托viewModels():

val viewModel: YourViewModel by viewModels()

来源:https://forums.bignerdranch.com/t/solution-to-deprecated-method-viewmodelproviders-of/16833

我正在使用android X,也有这个问题。

首先,你应该把这些依赖项添加到Gradle中:

implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version"
kapt "androidx.lifecycle:lifecycle-compiler:$lifecycle_version" 

在我的例子中,$lifecycle_version是2.2.0-rc02

第二: ViewModelProvider的导入应该是:

import androidx.lifecycle.ViewModelProvider

然后你可以像下面的例子一样初始化你的vIewModel:

val viewModel = ViewModelProvider(this, YourFactoryInstace).get(MainViewModel::class.java)

val viewModel = ViewModelProvider(this).get(MainViewModel::class.java)

我也面临着同样的问题。如果有什么不工作,尝试这段代码到你的oncreate,并根据你的文件编辑它,boom你是GTG

val model = ViewModelProvider(viewModelStore,ViewModelProvider.AndroidViewModelFactory.getInstance(application)).get(MainActivityViewModel::class.java)

//你只需要改变模型类

试试这个…

 LocationViewModel locationViewModel = new ViewModelProvider(this).get(LocationViewModel.class);