我想将AndroidViewModel用于我的视图模型,以便访问Context
。它需要Application
作为参数传递。我的ViewModel类如下所示:
class FooAndroidViewModel(application: Application?) : AndroidViewModel(aplication) {
...
}
它实例化如下:
val fooModel = ViewModelProviders.of(this).get(FooAndroidViewModel::class.java)
问题是这会产生错误,FooAndroidViewModel
无法实例化 - 可能是因为缺少application
参数。
问题:如何将application
传递给ViewModelProviders.of(this).get(FooAndroidViewModel::class.java)
?
答案 0 :(得分:4)
只需将application: Application?
替换为application: Application
。
以下代码应该有效:
class FooAndroidViewModel(application: Application) : AndroidViewModel(aplication) {
...
}
答案 1 :(得分:0)
即使我们有这种方式,
class FooAndroidViewModel(application: Application) : AndroidViewModel(aplication)
但是我们不使用by viewModels()
选项,而是尝试将其用作
val mViewModel = ViewModelProvider(this).get(FooAndroidViewModel::class.java)
然后它给出了一个例外,
java.lang.RuntimeException: Cannot create an instance of class x.y.z.FooAndroidViewModel
Caused by: java.lang.InstantiationException: java.lang.Class<x.y.z.FooAndroidViewModel> has no zero argument constructor
我通过这样创建AndroidViewModel
的实例来解决了这个问题,
val mViewModel = ViewModelProvider.AndroidViewModelFactory(application).create(FooAndroidViewModel::class.java)