ViewPager报错:addOnAdapterChangeListener无法适配OnPageChangeListener
解决ViewPager中addOnAdapterChangeListener参数不匹配的错误
嘿,这个问题我之前踩过坑!你这明显是把两种完全不同的监听器搞混了,才触发了这个参数不匹配的错误。
错误原因拆解
你调用的addOnAdapterChangeListener()方法,是专门用来监听ViewPager的适配器发生变更(比如替换、设置新的PagerAdapter)的,它要求传入的参数必须是OnAdapterChangeListener类型的实例;但你传进去的是OnPageChangeListener——这是用来监听页面切换、滑动状态变化的监听器,两者的作用完全不搭边,编译器当然会给你报错啦。
分情况解决
根据你的实际需求选对应的方案:
如果你想监听页面切换/滑动(最可能的需求)
别再用addOnAdapterChangeListener()了,换成addOnPageChangeListener()方法,传入OnPageChangeListener实例就行:
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { // 页面滑动过程中的回调逻辑 } @Override public void onPageSelected(int position) { // 页面被选中时的回调逻辑 } @Override public void onPageScrollStateChanged(int state) { // 滑动状态改变(比如开始滑动、停止滑动)时的回调逻辑 } });
如果你确实要监听适配器的变化
那就要传入正确的OnAdapterChangeListener实例,示例代码:
viewPager.addOnAdapterChangeListener(new ViewPager.OnAdapterChangeListener() { @Override public void onAdapterChanged(@NonNull ViewPager viewPager, @Nullable PagerAdapter oldAdapter, @Nullable PagerAdapter newAdapter) { // 适配器发生替换/更新时的回调,这里可以获取旧适配器和新适配器做相应处理 } });
小提醒
如果你项目用的是AndroidX,注意包名是androidx.viewpager.widget.ViewPager,但监听器的对应关系和support包是一致的,别搞错就行。
内容的提问来源于stack exchange,提问作者Antonio Sierra Hurtado
相关产品推荐
相关产品推荐

