Обновление 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

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