Мои операции с запросами к базе данных могут занимать много времени, поэтому я хочу отображать ProgressBar во время выполнения запроса. Это особенно проблема, когда пользователь изменяет параметры сортировки, потому что он некоторое время отображает старый список, пока не появится новый список и не будет обновлен RecyclerView. Я просто не знаю, где фиксировать состояния загрузки и успеха для такого запроса.
Вот мой метод получения PagedList из базы данных:
fun getGameList(): LiveData<PagedList<Game>> {
// Builds a SimpleSQLiteQuery to be used with @RawQuery
val query = buildGameListQuery()
val dataSourceFactory: DataSource.Factory<Int, Game> = database.gameDao.getGameList(query)
val data: LiveData<PagedList<Game>> = LivePagedListBuilder(dataSourceFactory, DATABASE_PAGE_SIZE)
.build()
return data
}
И я обновляю свой список, наблюдая за этим:
val games = Transformations.switchMap(gameRepository.sortOptions) {
gameRepository.getGameList()
}
Нужен ли мне собственный DataSource и DataSource.Factory? Если да, то я даже не знаю, с чего начать. Я полагаю, что это будет PositionalDataSource, но я не могу найти в Интернете никаких примеров для реализации пользовательского.
Я также попробовал adapter.registerAdapterDataObserver()
на своем адаптере RecyclerView. Это запускает различные обратные вызовы, когда отображаются новые данные списка, но я не могу отличить обратные вызовы, когда загрузка началась и остановилась.