Android-通过viewModels()在ViewModel上使用可注入构造函数

时间:2019-12-03 12:48:09

标签: android kotlin mvvm viewmodel dagger-2

想知道有人会怎么处理。

我有一个具有各自视图模型的片段。该视图模型在其构造函数中具有注入的回购。但是,当使用“ by viewModels()”在我的片段中创建视图模型实例时,出现错误。

示例:


@Singleton
class MyViewModel @Inject constructor(val someRepo: SomeRepo) : ViewModel() { ... }

class MyFragment : BaseFragment(), Injectable {
    val myViewModel: MyViewModel by viewModels()
    ...
}
Error:     java.lang.RuntimeException: Cannot create an instance of class com.example.MVVM.ViewModel.MyViewModel

有人在没有创建自己的viewModelFactory的情况下使它起作用吗?

1 个答案:

答案 0 :(得分:0)

您需要做几件事才能将内容注入到viewmodel中:

  1. 具有自定义的ViewModelFactory,它将成为图形的一部分
  2. 将Viewmodel类绑定到图中
  3. 将此工厂注入您的片段
  4. 在viewModels方法by viewModels { theInjectedFactory}中使用自定义工厂

所有步骤1-3在许多articles或SO的答案中都有描述,例如:

PS:如EpicPandaForce所述,您不应将视图模型标记为@Singleton