【问题标题】:ViewModelProviders is deprecated in 2.2.0ViewModelProviders 在 2.2.0 中已弃用
【发布时间】:2020-02-21 05:50:04
【问题描述】:

目前我将androidx.lifecycle:lifecycle-extensions 版本从2.2.0-alpha01 更新为2.2.0,它表明 ViewModelProviders 已被贬低。那么在 kotlin 中使用 ViewModelProviders 的替代方法是什么?

【问题讨论】:

  • ViewModelProvider(this).get(ChatViewModel::class.java)

标签: kotlin android-jetpack android-viewmodel viewmodelproviders


【解决方案1】:

旧版本

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

现在替代

在java中

viewModel = ViewModelProvider(this).get(BaseViewModel.class);

在科特林中

var  viewModel = ViewModelProvider(this).get(BaseViewModel::class.java)

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

【讨论】:

  • 在 Java 中“viewModel = new ViewModelProvider(this).get(BaseViewModel.class);”
【解决方案2】:

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

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

例如最新版本

MyViewModel myViewModel = new ViewModelProvider(this, viewModelFactory).get(MyViewModel.class);

或者,使用 ViewModelStore link

MyViewModel myViewModel = new ViewModelProvider(getViewModelStore(), viewModelFactory).get(MyViewModel.class);

【讨论】:

    【解决方案3】:

    正如documentation 中所说,您现在可以直接使用ViewModelProvider constructors。这应该主要是将ViewModelProviders.of( 更改为ViewModelProvider( 的问题,但是您也可以在documentation 中查看哪些新方法与哪些旧方法相对应的完整列表。

    在 Kotlin 中,您还可以在 Activity/Fragment 中使用 by viewModels() 属性委托来获取单独的 ViewModels。例如:

    val model: MyViewModel by viewModels()
    

    【讨论】:

      猜你喜欢
      • 2019-05-23
      • 1970-01-01
      • 1970-01-01
      • 2020-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-10
      • 1970-01-01
      相关资源
      最近更新 更多