问题标签 [mediatorlivedata]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
759 浏览

android - Android mediator live data 将 2 个 live data 合并为一个 stream 和一个 trigger

我有 2 个实时数据,我将它们作为源添加到中介实时数据中,我从视图模型中公开它以供片段观察。

当任何一个实时数据发生变化时,它都会触发中介实时数据的 onChanged 方法,这意味着我的观察者被触发了两次,我想要将两者结合起来并观察一个只触发一次的流,有什么我在丢失还是我需要为此推出自己的方法?目前我这样做,这会触发两次

为简洁起见删除了一些代码

有什么帮助吗?

0 投票
0 回答
139 浏览

android - 如何使用 Room 和 LiveData Android 填充多个对象数据库

在云数据库(firebase 或 Retrofit 无关紧要。),我有多个对象,如餐厅、菜单、食物、用户等。第一次启动App 时,我需要一个接一个地获取它们并填充数据库。我可以一个人拿来其中的任何一个。我看到 Mediatorlivedata,List>> 有两个对象,但它似乎不实用。将有许多数据要插入和许多绑定到的任务。适合这里的最佳做法是什么?你的建议是什么?

示例对象

远程存储库

本地的插入方法是无效的。

0 投票
1 回答
1134 浏览

android - Android 观察多个 MutableLiveData

我有一个 MVVM 设置,两个片段通过 ViewModel 交互。我SourceFragment正在更新MutableLiveDataVM 中的两个 LatLng。我的第二个是MapFragment用两个 LatLng LiveData 绘制路线。两个片段在 Activity 启动时被加载。SourceFragment 更新 LatLngs。在请求绘制路线之前,我需要等待地图加载,并且在MutableLiveData加载地图后我会更新第三个布尔值。目前我实现这一点的方法是通过一组 if 语句为MutableLiveData我的三个设置三个单独的 viewModel Observers来检查所有三个设置的时间。我有一种感觉,这可以用类似的方法做得更好,但我还没有找到一个我可以解决的例子。是MapFragmentMutableLiveDataMediatorLiveDataMediatorLiveData或其他适用于此的东西?

我的源代码片段

我的地图片段

我的视图模型

0 投票
3 回答
3080 浏览

java - 如何从 livedata 中删除观察者,使其在导航回片段时不会显示两次

我有一个片段,当用户成功登录时会显示一个弹出窗口。如果我导航到一个新片段并返回,则会再次显示具有先前用户名的弹出窗口。我使用 SingleLiveEvent 解决了这个问题,但我现在必须重构我的代码以使用 MediatorLiveData,因为我的数据可以来自 2 个源(远程和数据库),并且它与 SingleLiveEvent 不兼容。

我尝试使用事件包装器并删除 onDestroyView() 上的观察者,但到目前为止没有任何工作,当我移回片段时,livedata onChanged 函数不断被调用。这是我的一些片段:

这是我的 ViewModel,我必须使用转换,因为我从片段中获取 userId,传递给 Viewmodel,后者将其传递给存储库进行查询(也许有更好的方法?):

0 投票
1 回答
346 浏览

android - Android Room 将 N 个查询的结果组合成一个实时数据列表

我有一个房间数据库设置,我想查询该数据库 N 次并将每个查询的结果组合到一个实时数据数组中以显示给用户。

我很确定我想使用MediatorLiveData,但每个在线示例都有预定义数量的实时数据源组合。

我有以下设置:

宠物道

宠物资料库

0 投票
1 回答
162 浏览

android - MediatorLiveData 在 addSource 观察到的 LiveData 返回之前调用旧数据

下面是我在我的存储库中的方法:

这个问题是 UI 短暂显示过时的数据,但我希望 MediatorLiveData 对象 randomTrail 等到 currentRandomTrail 返回它的值。过时的数据首先出现,然后 MediatorLiveData 对象更新。知道为什么我的 MediatorLiveData 对象没有按预期工作吗?

0 投票
1 回答
525 浏览

android - 如何合并 3 个或更多不同泛型的 LiveData 源?

我正在尝试将 3 个或更多 LiveData 作为源合并,其中每个 LiveData 的通用类型与其他的不同。为此,我的意图是使用每个 LiveData 以其各自类型接收的可变参数。

我已经解决了这个问题,但是对 3 个数据源使用了一个“硬代码”,其解决方案与这个答案的解决方案非常相似,但这是不可扩展的。

使用意图如下(不编译):

问题:我无法访问源类型对象的方法。


到目前为止我的实现如下:

我正在尝试做的是使循环 X 的每次迭代为 R、S 或 U。

有什么建议吗?谢谢

资源

0 投票
2 回答
4060 浏览

android - 带过滤器的 LiveData?

我是 LiveData 的新手,最近我一直在做一些测试。我有一个应用程序,我需要在其中显示可以过滤的数据(名称、类别、日期......)。过滤器也可以组合(名称+日期)。该数据来自使用 Retrofit + RXJava 的 API 调用。

我知道我可以在不使用 LiveData 的情况下直接在我的视图中获取数据。但是,我认为使用 ViewModel + LiveData 会很有趣。首先,要测试它是如何工作的,还要避免在视图不活动时尝试设置数据(感谢 LiveData)并在配置更改时保存数据(感谢 ViewModel)。这些是我以前必须手动处理的事情。

所以问题是我没有找到一种方法来使用 LiveData 轻松处理过滤器。在用户选择一个过滤器的情况下,我设法使其与 switchMap 一起工作:

如果他选择两个过滤器,我发现我可以使用自定义 MediatorLiveData,这就是我所做的。但是,这里的问题是我的存储库调用与我拥有的过滤器数量一样多,而且我不能同时设置两个过滤器

我的自定义 MediatorLiveData:

我是否充分了解 MediatorLiveData 的用法?是否可以使用 LiveData 实现我想要实现的目标?

谢谢!

0 投票
2 回答
237 浏览

android - LiveData 有两个来源?

我想对不同来源使用相同的 LiveData。一个来自 API 调用,它是可观察的,另一个来自数据库,它是 LiveData。我希望能够做这样的事情:

问题是 Transformation.map 总是返回一个 LiveData 并且为了使items.setValue(itemsList)项目需要是一个 MutableLiveData。我尝试使用 MediatorLiveData,但它调用了两个源并混合了所有内容。这不是我在这里需要的。我需要一个来源或另一个。可能吗?

0 投票
0 回答
189 浏览

android - Android MediatorLiveData 值更改被调用 2 次

我在从 firebase 获取数据的函数中有一个中介实时数据对象。

这是我的功能:

在我的活动中,我正在观察我的用户中介对象:

checkIfExistingUser()当我单击我的登录按钮时调用此函数。但是在日志中我可以看到函数 decomposeDataSnapshots() 被调用了两次,我不知道为什么。请参阅下面的日志结果:

如您所见,数字 4 和 5 被调用了两次,我不知道为什么。

我是否以错误的方式使用调解器实时数据?请帮我。