Фильтр библиотеки подкачки / Поиск PageList <T> - PullRequest
0 голосов
/ 25 марта 2019

Я использую библиотеку подкачки Android, как описано здесь: https://developer.android.com/topic/libraries/architecture/paging.html

Но у меня также есть EditText для поиска стран по имени.

Как я могу отфильтровать результаты из подкачкибиблиотека для отображения только соответствующих стран?

публичный финал LiveData> countryPagedList;

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 ]

1 голос
/ 25 марта 2019

Предполагая, что вы достаточно хорошо понимаете библиотеку подкачки, комнату и прием, необходимо сделать несколько вещей:

  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.

0 голосов
/ 25 марта 2019

Просто добавьте SQL query к и получите результаты в соответствии с названием страны в вашем Dao

@Dao
class YourDao {
  @Query("Select * FROM countryEntity WHERE countryName LIKE :countryName")
  fun getCountryNameFilter(countryName : String) : MutableList<Country>
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...