在我当前的项目中,使用下一行:
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中已弃用。
为此有任何想法吗?
答案 0 :(得分:2)
ViewModelProviders
仅仅是一个实用工具类的静态方法,就没有必要进行实例化(有中没有任何实例方法反正),所以构造被弃用不应该是一个问题。
在使用它的方式是通过调用其适当of
方法为您的使用情况下,传递一个Fragment
或Activity
,然后调用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)
打开build.gradle(模块:〜.app)
将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)