Я использую новую библиотеку подкачки для загрузки данных с разбивкой на страницы из API-интерфейса для отдыха, но мне не удается понять, как продолжить загрузку свежих данных после их кэширования в Room. В настоящее время у меня есть PagedListAdapter, который обновляется с помощью обратного вызова границы для загрузки элементов из API, которые затем сохраняются в локальной базе данных (комнате) и передаются в пользовательский интерфейс через поток.
Вызовы onZeroItemsLoaded и onItemAtEndLoaded из BoundaryCallback работают должным образом, но только для начальной загрузки. Как только данные будут получены один раз и сохранены в кеше (Room), я никогда не получу свежие данные от сетевой службы — данные уже есть в кеше, и граничные обратные вызовы не запускаются.
Как с помощью библиотеки подкачки помечать элементы как устаревшие, чтобы при каждом открытии приложения мои данные были свежими?
ItemCallback.kt:
class ItemBoundaryCallback : PagedList.BoundaryCallback() {
override fun onZeroItemsLoaded() {
itemsFromNetwork(0)
}
override fun onItemAtEndLoaded(itemAtEnd: Item) {
itemsFromNetwork(itemAtEnd.rank)
}
}
ItemRepository.kt:
fun items(): Flowable
> {
return RxPagedListBuilder(database.itemDao().items(), pageSize)
.setBoundaryCallback(boundaryCallback)
.buildFlowable(BackpressureStrategy.LATEST)
}
ItemDao.kt
@Query("SELECT * FROM item ORDER BY rank ASC")
fun items(): DataSource.Factory
ItemAdapter.kt
class ItemAdapter() : PagedListAdapter(diffCallback) {
companion object {
private val diffCallback = object : DiffUtil.ItemCallback() {
override fun areItemsTheSame(old: Item, new: Item): Boolean = old.id == new.id
override fun areContentsTheSame(old: Item, new: Item): Boolean = old == new
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
return ItemViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.r_item, parent, false))
}
override fun onBindViewHolder(viewHolder: ItemViewHolder, position: Int) {
viewHolder.bind(getItem(position), clickListener)
}
}
ItemFragment.kt
override fun onStart() {
super.onStart()
itemRepository.items()
.subscribe(itemAdapter::submitList)
.addTo(disposables)
Подробнее здесь: https://stackoverflow.com/questions/510 ... twork-data
Обновление PagedListAdapter после первоначальной загрузки для отображения последних сетевых данных. ⇐ Android
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как удалить элемент из PagedListAdapter в компоненте подкачки Android
Anonymous » » в форуме Android - 0 Ответы
- 6 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Хук Wordpress для отображения последних ожидающих сообщений вместо уже опубликованных
Anonymous » » в форуме Php - 0 Ответы
- 20 Просмотры
-
Последнее сообщение Anonymous
-