Привет!
Не могу найти рабочий пример PagedListAdapter + AdMob, все что нашел только RecyclerView + AdMob.
Пробую реализовать сам и не могу решить проблему с бесконечной автопрокруткой в PagedListAdapter.
При прокрутке списка в самый низ, после дозагрузки элементов с сети, автоматически происходит скачок в самый низ списка, запрашивается новая дозагрузка, и так до бесконечности.
Прошу помочь, готов оплатить рабочее решение через WebMoney.
В PagedListAdapter есть следующие элементы:
- Header - первый элемент в списке
- Item - основные элементы получаемые с сети и бд - PagedListAdapter<Item, ViewHolder>
- Admob - баннер, каждый пятый элемент списка
- Loader - последний элемент в списке, показываем при дозагрузке списка
Реализовано это так:
Конфиг PagedList:
config = PagedList.Config.Builder()
.setEnablePlaceholders(false)
.setPageSize(10)
.build()
PagedListAdapter:
1. Используется setHasStableIds(true)
2.
override fun getItemId(position: Int): Long
отдается уникальный id для каждого элемента списка
override fun getItem(position: Int): Item?
Отдается элемент из super.getItem(index)
Где index пересчитывается с position, с учетом наличия в списке элементов Header и Admob
override fun getItemCount(): Int
Отдается (сумма всех Item) + (сумма всех Admob) + (1 элемент Header) + (1 элемент Loader, если он показывается сейчас)
override fun getItemViewType(position: Int): Int
Отдается тип элемента в зависимости от position - Header, Item, Admob или Loader
3. POST_COMPARATOR:
areContentsTheSame: проверяется совпадение по полю indexInResponse
areItemsTheSame: проверяется равность oldItem == newItem
4. Используется функция setNetworkState, с стандартного примера, в которой показыввется / прячется Loader через notifyItemInserted/notifyItemRemoved/notifyItemChanged
5. При получения контента баннера в фрагменте, который содержит этот PagedListAdapter обновляется элемент Admob, через notifyItemChanged(position)
6. Для сортировки в dataSource используется поле indexInResponse (как в стандартном примере), которое считается перед добавлением элементов Item в бд.
Спасибо!!