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 的情况下使它工作?
您需要做几件事才能将内容注入视图模型:
- 拥有自定义 ViewModelFactory,它将成为您图表的一部分
- 将您的 Viewmodel class 绑定到图表中
- 将这个工厂注入到你的片段中
- 在 viewModels 方法中使用自定义工厂
by viewModels { theInjectedFactory}
所有步骤 1-3 在许多 articles 或 SO 上的答案中都有描述,例如:
- Inject property into ViewModel using Dagger 2
PS:正如 EpicPandaForce 所提到的,您不应该将视图模型标记为 @Singleton
想知道有人会如何处理这个问题。
我有一个具有相应视图模型的片段。该视图模型在其构造函数中有一个注入的 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 的情况下使它工作?
您需要做几件事才能将内容注入视图模型:
- 拥有自定义 ViewModelFactory,它将成为您图表的一部分
- 将您的 Viewmodel class 绑定到图表中
- 将这个工厂注入到你的片段中
- 在 viewModels 方法中使用自定义工厂
by viewModels { theInjectedFactory}
所有步骤 1-3 在许多 articles 或 SO 上的答案中都有描述,例如:
- Inject property into ViewModel using Dagger 2
PS:正如 EpicPandaForce 所提到的,您不应该将视图模型标记为 @Singleton