ViewPager2 колбек следующей страницы
У меня есть ViewPager2 с фотками, он постепенно заполняется фотками из галереи, их так-же можно удалять. Когда я перехожу на следующую страницу ViewPager2, то мне требуется обновить интерфейс.
Вот как я этого добился
val onPageChangeCallback = object : ViewPager2.OnPageChangeCallback() {
override fun onPageSelected(position: Int) {
if (position >= 0) {
updateUI()
}
super.onPageSelected(position)
}
}
viewPager2.registerOnPageChangeCallback(onPageChangeCallback)
Всё бы ничего, но есть некоторая проблема.
Есть предположим три фотки. И тут я начинаю их удалять с первого элемента, тем самым onPageSelected() не работает, потому что якобы мы не перелистываем страницу а просто вторая страница стала первой.
Был бы рад если кто нибудь бы предложил альтернативные варианты, или решение на текущем варианте.
Ответы (1 шт):
Я не совсем хорошо понимаю конкретно ваш кейс. Что именно вы обновляете в методе updateUi(). Но вы можете подписаться на изменение данных в адаптере:
pagerAdapter.registerAdapterDataObserver(object : RecyclerView.AdapterDataObserver() {
override fun onChanged() {
super.onChanged()
}
override fun onItemRangeRemoved(positionStart: Int, itemCount: Int) {
super.onItemRangeRemoved(positionStart, itemCount)
}
override fun onItemRangeMoved(fromPosition: Int, toPosition: Int, itemCount: Int) {
super.onItemRangeMoved(fromPosition, toPosition, itemCount)
}
override fun onItemRangeInserted(positionStart: Int, itemCount: Int) {
super.onItemRangeInserted(positionStart, itemCount)
}
override fun onItemRangeChanged(positionStart: Int, itemCount: Int) {
super.onItemRangeChanged(positionStart, itemCount)
}
override fun onItemRangeChanged(positionStart: Int, itemCount: Int, payload: Any?) {
super.onItemRangeChanged(positionStart, itemCount, payload)
}
})
И в одном из колбеков вызывать ваш updateUi().
Но если честно я не совсем уверен в том, что это именно то что вам нужно. Возможно если у вас на каждой страницу есть свой экран со своей логикой вам стоит подумать о том, чтоб сделать внутри Pager-а в качестве элемента Fragment так вам будет проще обрабатывать его жизненный цикл и соответственно обновлять Ui.