首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Hilt将ViewModel注入ViewModel

用Hilt将ViewModel注入ViewModel
EN

Stack Overflow用户
提问于 2021-01-13 22:53:34
回答 1查看 414关注 0票数 4

我目前正在做一个大型项目,其中我有一个使用MediatorLiveData观察其他LiveData源代码的ViewModelA。我想让这个ViewModelA从ViewModelB观察数据。

解决这个问题的一种方法是让片段同时使用两个视图模型,并在ViewModelB数据发生变化时更新ViewModelA。

代码语言:javascript
复制
@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的构造函数中。

代码语言:javascript
复制
class ViewModelA @ViewModelInject constructor(
        private val viewModelB: ViewModelB
) : ViewModel() {}

它目前是有效的,但我认为这不是一个好的做法。我在网上找不到太多关于这件事的信息。这会造成什么问题吗?

EN

回答 1

Stack Overflow用户

发布于 2021-01-13 23:45:26

如果您将结果从ViewModelA转发到ViewModelB,也可以达到同样的效果。这将给你带来分离的好处,视图模型将不会交织在一起,并改善可测试性。ViewModelA不应该知道谁在使用结果。

viewModela.myLiveData.observe(viewLifecycleOwner, viewModelB::onDataRetrieved)

onDataRetrieved中,您将有自己的逻辑来调用viewModelB.someLiveData

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65704356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档