gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 12:46:24 25 4
gpt4 key购买 nike

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

我有一个具有各自 View 模型的 fragment 。该 View 模型在其构造函数中有一个注入(inject)的 repo。但是,当使用“by viewModels()”在我的 fragment 中创建 View 模型实例时,我遇到了错误。

例子:


@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 的情况下让它工作?

最佳答案

您需要做几件事才能将内容注入(inject) View 模型:

  • 拥有自定义 ViewModelFactory 这将成为您的图表的一部分
  • 将您的 Viewmodel 类绑定(bind)到图表中
  • 将这个工厂注入(inject)你的 Fragment
  • 在 viewModels 方法中使用自定义工厂 by viewModels { theInjectedFactory}

  • 许多 articles 中描述了所有步骤 1-3或关于 SO 的答案,检查例如:
  • Inject property into ViewModel using Dagger 2

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

    关于Android - 通过 viewModels() 在 ViewModel 上使用可注入(inject)构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59157518/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com