在Kotlin中如何将ViewModel与ViewModelProvider.AndroidViewModelFactory一起使用?

时间:2019-02-02 04:17:43

标签: android kotlin viewmodel

在我当前的项目中,使用下一行:

mViewModel = ViewModelProviders.of(this).get(MainViewModel::class.java)

例如,ViewModel但在https://developer.android.com/reference/android/arch/lifecycle/ViewModelProviders.html#ViewModelProviders()中建议使用ViewModelProvider.AndroidViewModelFactory,因为ViewModelProviders()在API级别1.1.0中已弃用。

为此有任何想法吗?

5 个答案:

答案 0 :(得分:2)

ViewModelProviders仅仅是一个实用工具类的静态方法,就没有必要进行实例化(有中没有任何实例方法反正),所以构造被弃用不应该是一个问题。

在使用它的方式是通过调用其适当of方法为您的使用情况下,传递一个FragmentActivity,然后调用get的{ {1}}返回:

ViewModelProvider

如果在val viewModel = ViewModelProviders.of(thisFragment).get(MyViewModel::class.java) 方法的第二个参数中没有提供自己的工厂,则默认使用of。此实现可以创建没有构造函数参数的ViewModel子类,也可以创建扩展AndroidViewModelFactory的子类,例如:

AndroidViewModel

答案 1 :(得分:1)

您可以尝试此代码

    ViewModelProvider.AndroidViewModelFactory.getInstance(application).create(UserViewModel::class.java)

答案 2 :(得分:1)

  1. 打开build.gradle(模块:〜.app)

  2. 将appcompat版本编辑为1.3.0-alpha02

     implementation 'androidx.appcompat:appcompat:1.3.0-alpha02'
    

答案 3 :(得分:0)

所以,这很简单:

// This is the deprecated way to create a viewModel.
viewModel = ViewModelProviders.of(owner).get(MyViewModel::class.java)

//This is the deprecated way to create a viewModel with a factory.
viewModel = ViewModelProviders.of(owner, mViewModelFactory).get(MyViewModel::class.java)

// This is the new way to create a viewModel.
viewModel = ViewModelProvider(owner).get(MyViewModel::class.java)

//This is the new way to create a viewModel with a factory.
viewModel = ViewModelProvider(owner, mViewModelFactory).get(MyViewModel::class.java)

答案 4 :(得分:0)

您可以像这样使用AndroidViewModelFactory:

mViewModel = ViewModelProvider(this,
            ViewModelProvider.AndroidViewModelFactory(application))
            .get(MainViewModel::class.java)