Применить фильтр поиска к списку, возвращенному LiveData Android Kotlin - PullRequest
0 голосов
/ 14 апреля 2020

Я загружаю набор данных из базы данных, используя room и pagedList, так как это большой набор. Мне нужно отфильтровать эти данные и показать их пользователю, соответственно, используя тот же pagedlistadapter. Пожалуйста, помогите.

Дао выглядит следующим образом

@WorkerThread
    @Query("SELECT * FROM users WHERE name LIKE :query ORDER BY id DESC")
    fun getAll(query: String): DataSource.Factory<Int, users>

Таблица имеет 4 поля - идентификатор, имя, телефон, адрес

Ответы [ 2 ]

0 голосов
/ 15 апреля 2020

Вы должны использовать Transformations.switchMap() для запроса базы данных в любое время, когда изменяется условие поиска:

https://github.com/gavingt/upcoming-games/blob/cd7af7fbdd60933991ea7f8b966ca171bb594cb3/app/src/main/java/com/gavinsappcreations/upcominggames/ui/list/ListViewModel.kt#L35

Или посмотрите кодовую метку Google Paging Library, которая делает то же самое:

https://codelabs.developers.google.com/codelabs/android-paging/index.html?index=..%2F..%2Findex#1

0 голосов
/ 14 апреля 2020
@Query("SELECT * FROM users WHERE name LIKE :query ORDER BY id DESC")
fun getAll(query: String): DataSource.Factory<Int, users>

Вот ваша строка запроса должна иметь вид % ABC% , где ab c - имя пользователя.

* LIKE ключевое слово используется для проверки / поиска шаблона в записях Здесь вы можете прочитать возможные поиски шаблона

Чтобы прикрепить %% к вашему Строка запроса, вам нужно вызвать эту функцию, поскольку

YOUR_HELPER.getAll("%".plus(YOUR_QUERY).plus("%"))

plus() использует для конкатенации.

...