使用Hilt将ViewModel注入ViewModel



我目前正在进行一个大型项目,其中我有一个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的逻辑

相关内容

  • 没有找到相关文章

最新更新