![](/img/trans.png)
[英]Android Hilt injecting interface to a viewmodel impelemented by an activity
[英]Injecting ViewModel into ViewModel with Hilt
我目前正在做一个大项目,我有一个 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() {}
它目前有效,但我认为这不是一个好习惯。 我在网上找不到太多关于这个问题的信息。 这会引起任何问题吗?
如果将结果从ViewModelA
转发到ViewModelB
,则可以实现相同的效果。 这将为您带来分离的好处,视图模型不会交织在一起并提高可测试性。 ViewModelA
不应该知道谁在使用结果。
viewModela.myLiveData.observe(viewLifecycleOwner, viewModelB::onDataRetrieved)
在onDataRetrieved
,您将拥有自己的调用viewModelB.someLiveData
的逻辑
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.