我正在使用Android分页库,如此处所述:https://developer.android.com/topic/libraries/architecture/paging.html
但是我还有一个EditText用于按名称搜索国家/地区。
如何过滤分页库中的结果以仅显示匹配的国家/地区?
最终公共LiveData>国家/地区PagedList;
public AllCountriesViewModel(@NonNull Application application) {
super(application);
appRepository = new AppRepository(application);
PagedList.Config config = new PagedList.Config.Builder()
.setEnablePlaceholders(true)
.setPageSize(30)
.setInitialLoadSizeHint(10)
.setPrefetchDistance(50)
.build();
countriesPagedList = new LivePagedListBuilder(appRepository.getAllCountries(),config).build();
}
答案 0 :(得分:1)
假设您对分页库,房间和接收有合理的了解,则需要完成几件事:
private final LiveData<PagedList<YourEntity>> yourEntities;
private final MutableLiveData<String> filterText = new MutableLiveData<>();
这是将它们绑定在一起的方式:
this.yourEntities = Transformations.switchMap(
filterText, (Function<String, LiveData<PagedList<YourEntity>>>) input -> {
if (StringUtils.isBlank(input)) {
return new LivePagedListBuilder(
yourEntitiesManagementDao.queryYourEntities(), PAGE_SIZE).build();
} else {
return new LivePagedListBuilder(
yourEntitiesManagementDao.queryYourEntitiesFiltered("%" + input + "%"), PAGE_SIZE).build();
}
}
);
this.filterText.setValue("");
public void setFilter(String filter) {
filterText.setValue(filter);
}
基本上,使用上述设置,您只需要setFilter
即可使用EditText中的文本。
答案 1 :(得分:0)
只需根据您的SQL query
中的国家/地区名称添加Dao
到获取结果
@Dao
class YourDao {
@Query("Select * FROM countryEntity WHERE countryName LIKE :countryName")
fun getCountryNameFilter(countryName : String) : MutableList<Country>
}