如何在两个不同的片段中使用存储库数据

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 接口使用相同的数据库。

然后第一页可以触发获取或更新,而第二页订阅更新并显示它。

【讨论】:

以上是关于如何在两个不同的片段中使用存储库数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在存储库模式中为同一接口使用两个数据存储?

如何将不同的文件提交到两个不同的SVN(或git)存储库?

如何在导航抽屉中的两个片段之间传递数据

如何在 Linux 中存储不同编译的相同库版本?

如何在有和没有 ssh 身份验证的情况下将 Git 与两个不同的存储库一起使用?

Android 上的 Kotlin:如何在片段中使用数据库中的 LiveData?