我是 LiveData 的新手,最近我一直在做一些测试。我有一个应用程序,我需要在其中显示可以过滤的数据(名称、类别、日期......)。过滤器也可以组合(名称+日期)。该数据来自使用 Retrofit + RXJava 的 API 调用。
我知道我可以在不使用 LiveData 的情况下直接在我的视图中获取数据。但是,我认为使用 ViewModel + LiveData 会很有趣。首先,要测试它是如何工作的,还要避免在视图不活动时尝试设置数据(感谢 LiveData)并在配置更改时保存数据(感谢 ViewModel)。这些是我以前必须手动处理的事情。
所以问题是我没有找到一种方法来使用 LiveData 轻松处理过滤器。在用户选择一个过滤器的情况下,我设法使其与 switchMap 一起工作:
return Transformations.switchMap(filter,
filter -> LiveDataReactiveStreams.fromPublisher(
repository.getData(filter).toFlowable(BackpressureStrategy.BUFFER)));
如果他选择两个过滤器,我发现我可以使用自定义 MediatorLiveData,这就是我所做的。但是,这里的问题是我的存储库调用与我拥有的过滤器数量一样多,而且我不能同时设置两个过滤器。
我的自定义 MediatorLiveData:
class CustomLiveData extends MediatorLiveData<Filter> {
CustomLiveData(LiveData<String> name, LiveData<String> category) {
addSource(name, name -> {
setValue(new Filter(name, category.getValue()));
});
addSource(category, category -> {
setValue(new Filter(name.getValue(), newCategory));
});
}
}
CustomLiveData trigger = new CustomLiveData(name, category);
return Transformations.switchMap(trigger,
filter -> LiveDataReactiveStreams.fromPublisher(
repository.getData(filter.getName(), filter.getCategory())
.toFlowable(BackpressureStrategy.BUFFER)));
我是否充分了解 MediatorLiveData 的用法?是否可以使用 LiveData 实现我想要实现的目标?
谢谢!