我使用 LiveData + Transformations.map() :

private final LiveData<List<Task>> observableTasks;
(...)
observableTasks =  Transformations.map(tasksRepository.getTasks(), tasks-> filterTasks(tasks));

如何强制 LiveData 刷新?我需要 Transformations.map() 来准备新列表。当用户更改过滤选项时,我需要再次调用 filterTasks(tasks) 并显示新的排序列表。来自存储库 ( tasksRepository.getTasks() ) 的数据保持不变。

最佳答案

我想我找到了解决方案。我创建了额外的 LiveData 字段 filterChangeEvent 。每次用户更改过滤顺序时,都会将新值设置为 filterChangeEvent 。然后我使用 switchMapfilterChangeEvent 作为触发器:

    observableTasks = Transformations.switchMap(filterChangeEvent, input -> {
        final MediatorLiveData<List<Tasks>> result = new MediatorLiveData<>();
        result.addSource(tasksRepository.getTasks(), tasks -> result.setValue(filterTasks(tasks)));
        return result;
    });

关于java - LiveData, Transformations.map() - 如何在用户更改过滤顺序时强制刷新?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54362069/

10-12 00:37