Android ViewPager запаздывает с повторными просмотрами - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть viewpager, который содержит 3 фрагмента, в этих фрагментах нет изображения, а только простые ячейки.Когда я переключаюсь на более длинный фрагмент (в программе recyclerview есть больше элементов), viewpager отстает.

Я записываю видео для лучшего понимания: https://youtu.be/6IMzItswBGo

И мой пользовательский просмотрщик для настройки высоты страниц.

public class CustomPager extends ViewPager
{
    private int width = 0;
    public CustomPager(Context context) {
        super(context);
    }

    public CustomPager(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
    {
        int height = 0;
        width = widthMeasureSpec;
        if (getChildCount() > getCurrentItem()) {
            View child = getChildAt(getCurrentItem());
            child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
            int h = child.getMeasuredHeight();
            if(h > height) height = h;
        }

        heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY);

        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }

    public void onRefresh()
    {
        try {
            int height = 0;
            if (getChildCount() > getCurrentItem()) {
                View child = getChildAt(getCurrentItem());
                child.measure(width, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
                int h = child.getMeasuredHeight();
                if(h > height) height = h;
            }

            int heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY);
            ViewGroup.LayoutParams layoutParams = this.getLayoutParams();
            layoutParams.height = heightMeasureSpec;
            this.setLayoutParams(layoutParams);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Я использую это Динамическийвысота просмотра страницы

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Похоже, что это занимает слишком много времени в методе onMeasure().Интересно, почему вы хотите изменить высоту viewPage на рост детей?

0 голосов
/ 26 сентября 2018

Используйте этот код для предварительной загрузки всех 3-х фрагментов при настройке адаптера ViewPager.

 viewPager.setOffScreenPageLimit(3);
...