ViewModelProviders 在 2.2.0 中被弃用

Sud*_*han 6 kotlin android-viewmodel android-jetpack viewmodelproviders

目前我androidx.lifecycle:lifecycle-extensions2.2.0-alpha01to更新版本2.2.0,它显示 ViewModelProviders 已被弃用。那么在 kotlin 中使用ViewModelProviders的替代方法是什么?

小智 8

旧版本

var viewModel = ViewModelProviders.of(this).get(BaseViewModel::class.java)
Run Code Online (Sandbox Code Playgroud)

现在替代

在 Java 中

viewModel = ViewModelProvider(this).get(BaseViewModel.class);
Run Code Online (Sandbox Code Playgroud)

在科特林

var  viewModel = ViewModelProvider(this).get(BaseViewModel::class.java)
Run Code Online (Sandbox Code Playgroud)

参考 - https://developer.android.com/reference/androidx/lifecycle/ViewModelProviders

  • 在 Java 中“viewModel = new ViewModelProvider(this).get(BaseViewModel.class);” (2认同)

Chi*_*uva 7

例如,如果您使用的是旧版本。

MyViewModel myViewModel = new ViewModelProviders.of(this, new MyViewModelFactory(this.getApplication(), "Your string parameter")).get(MyViewModel.class);
Run Code Online (Sandbox Code Playgroud)

例如,对于最新版本

MyViewModel myViewModel = new ViewModelProvider(this, viewModelFactory).get(MyViewModel.class);
Run Code Online (Sandbox Code Playgroud)

或者,使用 ViewModelStore链接

MyViewModel myViewModel = new ViewModelProvider(getViewModelStore(), viewModelFactory).get(MyViewModel.class);
Run Code Online (Sandbox Code Playgroud)


Rya*_*ley 5

正如文档中所说,您现在可以直接使用ViewModelProvider构造函数。这应该主要是更改ViewModelProviders.of(ViewModelProvider(,但您也可以在文档中看到哪些新方法与哪些旧方法对应的完整列表。

在科特林,你也可以用by viewModels()你的财产范围内委托Activity/Fragment获得个人ViewModel秒。例如:

val model: MyViewModel by viewModels()
Run Code Online (Sandbox Code Playgroud)