如何在两个不同的片段中使用存储库数据
Posted
技术标签:
【中文标题】如何在两个不同的片段中使用存储库数据【英文标题】:How to use Repository data in two different fragments 【发布时间】:2022-01-07 04:56:12 【问题描述】:我有 FragmentA 和 FragmentAViewModel。 FragmentAViewModel 为 getContactData() 调用 RepositoryA,这是一个不阻塞 UI 的静默调用。
现在用户导航到具有 FragmentBViewModel 的 FragmentB。用户需要 FragmentB 中的 getContactData() 响应。
我想在 FragmentB 中显示加载进度,直到数据在 RepositoryA 中可用。一旦数据在 RepositoryA 中可用,我想更新 FragmentBViewModel 和 FragmentB。
怎么会这样。
注意: 我不想共享 ViewModel,因为这是整个功能中的小用例。 我不能在存储库中使用 LiveData,因为我需要生命周期所有者来观察。
我需要为此使用 RXandroid 或 Broadcast 吗?
【问题讨论】:
那么,这一切的意义何在?如果您需要 B 中的数据,那么在 A 中进行调用有什么意义?I want to show loading progress in FragmentB until the data is available in RepositoryA
那为什么要在 A 中呢?
我也想要 FragmentA 中的数据,但用户可能没有等待数据在 FragmentA 中加载
那么你能不能共享相同的基本活动?我想这对你来说太大了,你能做的最好的事情就是利用数据库
即使有基础片段或活动,视图模型的实例也会有所不同。我认为这行不通。我觉得唯一的方法是广播或 RXAndroid。还有其他建议吗?
Even with base fragment or activity, the instance of view model will be different
不?这不是共享虚拟机的工作方式。你觉得 Rxjava 会如何解决这个问题?
【参考方案1】:
流程对我来说有点奇怪,但完全可行。
如果两个页面都引用相同的数据源,例如:通过 Room 接口使用相同的数据库。
然后第一页可以触发获取或更新,而第二页订阅更新并显示它。
【讨论】:
以上是关于如何在两个不同的片段中使用存储库数据的主要内容,如果未能解决你的问题,请参考以下文章