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

Rip*_*ion 5 android mvvm viewmodel kotlin dagger-2

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

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

例子:


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

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

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

mly*_*yko 5

您需要做几件事才能将内容注入视图模型:

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

许多关于 SO 的文章或答案中都描述了所有步骤 1-3 ,请检查例如:

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