繁体   English   中英

使用 Hilt 将 ViewModel 注入 ViewModel

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM