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

Android - by viewModels() with injectable constructor on ViewModel

想知道有人会如何处理这个问题。

我有一个具有相应视图模型的片段。该视图模型在其构造函数中有一个注入的 repo。但是,当使用 "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. 拥有自定义 ViewModelFactory,它将成为您图表的一部分
  2. 将您的 Viewmodel class 绑定到图表中
  3. 将这个工厂注入到你的片段中
  4. 在 viewModels 方法中使用自定义工厂 by viewModels { theInjectedFactory}

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

  • Inject property into ViewModel using Dagger 2

PS:正如 EpicPandaForce 所提到的,您不应该将视图模型标记为 @Singleton