无法过滤 PagedList?
Posted
技术标签:
【中文标题】无法过滤 PagedList?【英文标题】:Could not filter a PagedList? 【发布时间】:2018-05-21 05:35:45 【问题描述】:我已经使用 android 的分页库 (https://developer.android.com/topic/libraries/architecture/paging.html) 实现了一个带有分页功能的 recyclerview。它适用于获取数据和检索后续页面。但是,如何过滤 PagedList ?假设我有一个搜索小部件,我想搜索当前屏幕上的列表。 PagedList.filter()
返回 List
并且 PagedListAdapter.setList()
不会接受 List
。
【问题讨论】:
A PagedList is a List. 更多信息:***.com/questions/49192540/… 您好,您有实现此目的的代码示例吗? 我在***.com/a/57851259/3146806回答了类似的问题 【参考方案1】:我认为您可以使用 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)
// ...
【讨论】:
请注明原作者:***.com/a/49193372/1866373以上是关于无法过滤 PagedList?的主要内容,如果未能解决你的问题,请参考以下文章
PagedList.Config 使用recycleview在中间加载列表
Spring boot Jackson Json Serialization for List 实现类(PagedList)