10 android viewmodel dagger-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
}
}
}
Run Code Online (Sandbox Code Playgroud)
不过,我想出了另一个解决方案,使用 Hilt 将 ViewModelB 注入 ViewModelA 的构造函数中。
class ViewModelA @ViewModelInject constructor(
private val viewModelB: ViewModelB
) : ViewModel() {}
Run Code Online (Sandbox Code Playgroud)
它目前有效,但我认为这不是一个好的做法。我在网上找不到关于此事的太多信息。这会引起任何问题吗?
如果将结果从 转发ViewModelA到 ,您也可以实现相同的效果ViewModelB。这将为您带来分离的好处,视图模型不会交织在一起并提高可测试性。ViewModelA不应该知道谁在消耗结果。
viewModela.myLiveData.observe(viewLifecycleOwner, viewModelB::onDataRetrieved)
你onDataRetrieved将有自己的调用逻辑viewModelB.someLiveData
| 归档时间: |
|
| 查看次数: |
3246 次 |
| 最近记录: |