LiveData、Transformations.map() - 当用户更改过滤顺序时如何强制刷新?

App*_*evo 5 java android android-livedata android-architecture-components

我用LiveData+ Transformations.map()

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

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

App*_*evo 1

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

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