我目前正在做一个大项目,我有一个 ViewModelA 使用 MediatorLiveData 来观察其他 LiveData 源。
我想让这个 ViewModelA 观察来自 ViewModelB 的数据。
解决此问题的一种方法是让 Fragment 同时使用 View 模型并在 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 注入(inject) ViewModelA 的构造函数。class ViewModelA @ViewModelInject constructor(
private val viewModelB: ViewModelB
) : ViewModel() {}
它目前有效,但我认为这不是一个好习惯。我在网上找不到太多关于这个问题的信息。这会引起任何问题吗?
最佳答案
如果您从 ViewModelA
转发结果,您可以达到同样的效果。至ViewModelB
.这将为您带来分离的好处, View 模型不会交织在一起并提高可测试性。 ViewModelA
不应该知道谁在消费结果。viewModela.myLiveData.observe(viewLifecycleOwner, viewModelB::onDataRetrieved)
在 onDataRetrieved
您将有自己的调用逻辑 viewModelB.someLiveData
关于android - 使用 Hilt 将 ViewModel 注入(inject) ViewModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65704356/