【问题标题】:Injecting ViewModel into ViewModel with Hilt使用 Hilt 将 ViewModel 注入 ViewModel
【发布时间】:2021-04-18 14:37:03
【问题描述】:

我目前正在从事一个大型项目,其中我有一个 ViewModelA 使用 MediatorLiveData 来观察其他 LiveData 源。 我想让这个 ViewModelA 从 ViewModelB 观察数据。

解决此问题的一种方法是让 Fragment 同时使用视图模型并在 ViewModelB 数据更改时更新 ViewModelA。

@AndroidEntryPoint
class FragmentA: Fragment() {

    //ViewModels
    private val viewModelA: ViewModelA by viewModels()
    private val viewModelB: ViewModelB by viewModels()

    onViewCreated... {
       viewModelA.someFunction().observe{
           viewModelB.someLiveData.value = it
       }
    }
}

但是我想出了另一个解决方案,我使用 Hilt 将 ViewModelB 注入 ViewModelA 的构造函数。

class ViewModelA @ViewModelInject constructor(
        private val viewModelB: ViewModelB
) : ViewModel() {}

它目前有效,但我认为这不是一个好习惯。我在网上找不到太多关于这个问题的信息。 会不会有什么问题?

【问题讨论】:

    标签: android viewmodel dagger-hilt


    【解决方案1】:

    如果将结果从ViewModelA 转发到ViewModelB,您也可以达到同样的效果。这将为您带来分离的好处,视图模型不会交织在一起并提高可测试性。 ViewModelA 不应该知道谁在消费结果。

    viewModela.myLiveData.observe(viewLifecycleOwner, viewModelB::onDataRetrieved)

    onDataRetrieved 中,您将有自己的逻辑来调用viewModelB.someLiveData

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-17
      相关资源
      最近更新 更多