分页库过滤器/搜索页面列表<t>

时间:2019-03-25 07:17:23

标签: android search android-jetpack android-paging

我正在使用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();
}

2 个答案:

答案 0 :(得分:1)

假设您对分页库,房间和接收有合理的了解,则需要完成几件事:

  1. 假设您以这种方式存储分页实体:private final LiveData<PagedList<YourEntity>> yourEntities;
  2. 以下是用于存储过滤器文本的内容:private final MutableLiveData<String> filterText = new MutableLiveData<>();
  3. 这是将它们绑定在一起的方式:

    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();
                }
            }
    );
    
  4. 确保您初始化过滤器文本,例如this.filterText.setValue("");
  5. 最后但并非最不重要的是,您还需要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>
}