gpt4 book ai didi

android - 无法过滤 PagedList?

转载 作者:行者123 更新时间:2023-12-03 17:49:57 25 4
gpt4 key购买 nike

我已经使用 Android 的分页库 (https://developer.android.com/topic/libraries/architecture/paging.html) 实现了一个带有分页的 recyclerview。它适用于获取数据和检索后续页面。但是,如何过滤 PagedList ?假设我有一个搜索小部件,我想搜索当前屏幕上的列表。 PagedList.filter()返回 ListPagedListAdapter.setList()不接受 List .

最佳答案

我认为您可以使用 MediatorLiveData 解决此问题。

特别是 Transformations.switchMap 和一些额外的魔法。

目前我正在使用

public void reloadTasks() {
if(liveResults != null) {
liveResults.removeObserver(this);
}
liveResults = getFilteredResults();
liveResults.observeForever(this);
}

但是如果你仔细想想,你应该可以不使用observeForever来解决这个问题,特别是如果我们考虑到switchMap也在做类似的事情。

所以我们需要的是一个 LiveData,它被开关映射到我们需要的 LiveData>。
private MutableLiveData<String> filterText = new MutableLiveData<>();

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 处理。如果我们想要缓存 LiveData,那么我们可以在传递给该方法的匿名实例中进行。
data = Transformations.switchMap(
filterText, new Function<String, LiveData<List<T>>>() {
private Map<String, LiveData<List<T>>> cachedLiveData = new HashMap<>();

@Override
public LiveData<List<T>> apply(String input) {
// ...
}
}

关于android - 无法过滤 PagedList?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47689517/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com