我正在使用 Android 分页库,如下所述: https://developer.android.com/topic/libraries/architecture/paging.html
但我也有一个 EditText 用于按名称搜索用户。
如何过滤 Paging 库中的结果以仅显示匹配的用户?
最佳答案
您可以使用 MediatorLiveData 解决此问题。
特别是 Transformations.switchMap
.
// original code, improved later
public void reloadTasks() {
if(liveResults != null) {
liveResults.removeObserver(this);
}
liveResults = getFilteredResults();
liveResults.observeForever(this);
}
但是如果你想一想,你应该可以不使用 observeForever
来解决这个问题。 ,特别是如果我们认为 switchMap
也在做类似的事情。
所以我们需要一个LiveData<SelectedOption>
被开关映射到 LiveData<PagedList<T>>
我们需要的。
private final MutableLiveData<String> filterText = savedStateHandle.getLiveData("filterText")
private final LiveData<List<T>> data;
public MyViewModel() {
data = Transformations.switchMap(
filterText,
(input) -> {
if(input == null || input.equals("")) {
return repository.getData();
} else {
return repository.getFilteredData(input); }
}
});
}
public LiveData<List<T>> getData() {
return data;
}
这样,从一个到另一个的实际更改由 MediatorLiveData 处理。
关于android - 分页库过滤器/搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49192540/