Не срабатывает метод ViewPager2.registerOnPageChangeCallback()

Рейтинг: 0Ответов: 1Опубликовано: 10.05.2023

У меня есть Pager основанный на фрагментах, т.к. всего 3 страницы. И при скроле у меня разная высота контента и Pager ее обрезает. Решил обойти это сделав метод который активируется по идее, когда сменилась страница, но не срабатывает по какой то причине(Без метода код с высотой работает)?! Надеюсь на вашу помощь!

Код MainActivity.kt:

        slider.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
        override fun onPageSelected(position: Int) {
            super.onPageSelected(position)
            val view = slider
                view.post {
                    val wMeasureSpec = View.MeasureSpec.makeMeasureSpec(view.width, View.MeasureSpec.EXACTLY)
                    val hMeasureSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)
                    view.measure(wMeasureSpec, hMeasureSpec)

                    if (slider.layoutParams.height != view.measuredHeight) {
                        // ParentViewGroup is, for example, LinearLayout
                        // ... or whatever the parent of the ViewPager2 is
                        slider.layoutParams = (slider.layoutParams as LinearLayout.LayoutParams)
                            .also { lp -> lp.height = view.measuredHeight }
                    }
                }
        }
    })

Ответы

▲ 0

Сложно судить с таким неймингом где конекретно проблемы, но есть такие идеи:

  1. Убедиться что функция точно не вызывается с помощью логов.

Если проблема в этом, то попробовать реализовать функцию onPageSelected(position: Int) и использовать её.

  1. Если функция всё же вызывается, то попробовать вызывать изменения в UI post. Вроде:

    post { slider.layoutParams.height = 100 }

  2. Нашёл вот такую тему, где в комментах предлагают готовое решение. Можно скопипастить:

Ссылка