我在ViewPager2中找不到PageChangeListener。

18

ViewPager2的PageChangeListener与普通的ViewPager不同,为什么?


2
ViewPager2 提供了 OnPageChangeCallback - Vir Rajpurohit
这可以工作。谢谢。 - Unaisul Hadi
4个回答

43

有一个registerOnPageChangeCallback方法可以实现这个功能:

pager.registerOnPageChangeCallback(object: ViewPager2.OnPageChangeCallback() {
            override fun onPageScrolled(
                position: Int,
                positionOffset: Float,
                positionOffsetPixels: Int
            ) {
                super.onPageScrolled(position, positionOffset, positionOffsetPixels)
            }

            override fun onPageSelected(position: Int) {
                super.onPageSelected(position)
            }

            override fun onPageScrollStateChanged(state: Int) {
                super.onPageScrollStateChanged(state)
            }
        })

7
只需要花费5分钱:不要忘记注销监听器。 - Sergey Trukhachev

7
以下是ViewPager2中OnPageChangeListener的示例代码。
class ViewPager2PageChangeCallback(private val listener: (Int) -> Unit) : ViewPager2.OnPageChangeCallback() {
    override fun onPageSelected(position: Int) {
            super.onPageSelected(position)
            when (position) {
               //YOUR CODE
            }
        }
    }

4

在Java中,可以这样编写代码:

mViewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
    @Override
    public void onPageScrolled(int position,
            float positionOffset, int positionOffsetPixels) {
        super.onPageScrolled(position, positionOffset, positionOffsetPixels);

        setProgress((position + positionOffset) / (mPageCount - 1));
    }
});

1
你可以这样做。
viewPager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            super.onPageScrolled(position, positionOffset, positionOffsetPixels);
        }

        @Override
        public void onPageSelected(int position) {
            super.onPageSelected(position);
        }

        @Override
        public void onPageScrollStateChanged(int state) {
            super.onPageScrollStateChanged(state);
        }
    });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接