Как использовать ViewPager2 для измерения высоты содержимого пейджера просмотра - PullRequest
0 голосов
/ 26 мая 2020

Какой правильный способ обернуть содержимое информации пейджера просмотра при использовании ViewPager2? Это нормально работало в ViewPager1, но после перехода на ViewPager2 я не могу продолжить работу, не исправив появившуюся ошибку. Как это можно исправить?

При использовании ViewPager1

class MyViewPager(context: Context, attrs: AttributeSet) : ViewPager(context, attrs) {
    override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
        val zeroHeight = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)

        val maxHeight = children
            .map { it.measure(widthMeasureSpec, zeroHeight); it.measuredHeight }
            .max() ?: 0

        if (maxHeight > 0) {
            val maxHeightSpec = MeasureSpec.makeMeasureSpec(maxHeight, MeasureSpec.EXACTLY)
            super.onMeasure(widthMeasureSpec, maxHeightSpec)
            return
        }

        super.onMeasure(widthMeasureSpec, heightMeasureSpec)
    }
}

При использовании ViewPager2

class MyViewPager(context: Context, attrs: AttributeSet) : ViewPager2(context, attrs) {
    override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
        val zeroHeight = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)

        val maxHeight = children
            .map { it.measure(widthMeasureSpec, zeroHeight); it.measuredHeight }
            .max() ?: 0

        if (maxHeight > 0) {
            val maxHeightSpec = MeasureSpec.makeMeasureSpec(maxHeight, MeasureSpec.EXACTLY)
            super.onMeasure(widthMeasureSpec, maxHeightSpec)
            return
        }

        super.onMeasure(widthMeasureSpec, heightMeasureSpec)
    }
}

Ошибка

Этот тип окончательный, поэтому его нельзя унаследовать от

...