Обновление PagedListAdapter после первоначальной загрузки для отображения последних сетевых данных.Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Обновление PagedListAdapter после первоначальной загрузки для отображения последних сетевых данных.

Сообщение Anonymous »

Я использую новую библиотеку подкачки для загрузки данных с разбивкой на страницы из 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Складывание кода Python на основе деревьев не применяется при первоначальной загрузке файла в neovim
    Anonymous » » в форуме Python
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • PagedListAdapter перезагружает данные без заполнителей
    Anonymous » » в форуме Android
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Как удалить элемент из PagedListAdapter в компоненте подкачки Android
    Anonymous » » в форуме Android
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Хук Wordpress для отображения последних ожидающих сообщений вместо уже опубликованных
    Anonymous » » в форуме Php
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Twitter API 1.1 для отображения последних твитов
    Anonymous » » в форуме Php
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Android»