将应用程序传递给AndroidViewModel

时间:2017-06-09 11:51:23

标签: android kotlin

我想将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)

2 个答案:

答案 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)