【问题标题】:'ViewModelProviders' is deprecated. Java solution?'ViewModelProviders' 已弃用。 Java解决方案?
【发布时间】:2019-12-06 20:28:09
【问题描述】:

'ViewModelProviders' 已从 androidx.lifecycle:lifecycle-*:2.2.0-alpha03 中弃用 https://developer.android.com/jetpack/androidx/releases/lifecycle#2.2.0-alpha03 这是 Kotlin 的解决方案 'ViewModelProviders' is deprecated. After upgrading lifecycle-extensions:2.1.0 to 2.2.0-alpha05 但它的 Java 版本是什么? ViewModelProvider(this).get(MyViewModel.class) 不适用于 Java。

【问题讨论】:

  • 出于某种原因,他们将其替换为new ViewModelProvider(this)。 Tbh 以前的变体更好,但这是他们的库
  • 是的,没错。谢谢老兄。

标签: android viewmodel viewmodelproviders


【解决方案1】:

ViewModelProviders.of(this).get(MyViewModel.class); - 已弃用

new ViewModelProvider(this).get(MyViewModel.class); - 正确

感谢@EpicPandaForce!

【讨论】:

    【解决方案2】:

    通用示例(直到 android.arch.lifecycle:extensions:1.1.0)。它已从 1.1.1 弃用,

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

    通用示例(适用于 android.arch.lifecycle:extensions:1.1.1)

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

    或者,使用 ViewModelStore link

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

    【讨论】:

      【解决方案3】:

      您还可以为您的 ViewModel 创建一个 CREATOR 对象,并从您的活动中调用此对象,该对象将充当您可以在调用任何 ViewModelFactory 时调用的工厂对象。

      ViewModelProviders.of(this, ViewModelFactoryObject).get(ViewModel::class.java).apply{}
      

      【讨论】:

        猜你喜欢
        • 2020-11-07
        • 2019-05-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-23
        • 1970-01-01
        • 2013-02-24
        • 2019-08-30
        相关资源
        最近更新 更多