开发者社区> 问答> 正文

android ViewPager 左右循环滑动?报错

我想实现viewpager左右滑动,下面代码当size小于4时,向左滑动会报错,即无法destroy。网上说至少3张图,为何我3张也不行,只有4张或以上才行,求解答

private final class AdPageAdapter extends PagerAdapter {  
        private List<View> views = null;  
  
        /**
         * 初始化数据源, 即View数组
         */
        public AdPageAdapter(List<View> views) {  
            this.views = views;  
        }  
        
        /**
         * 从ViewPager中删除集合中对应索引的View对象
         */
        @Override  
        public void destroyItem(View container, int position, Object object) {  
            ((ViewPager) container).removeView(views.get(position%views.size()));  
        }  
  
        /**
         * 获取ViewPager的个数
         */
        @Override  
        public int getCount() {  
            return Integer.MAX_VALUE;  
        }  
  
        /**
         * 从View集合中获取对应索引的元素, 并添加到ViewPager中
         */
        @Override  
        public Object instantiateItem(View container, int position) {  
            ((ViewPager) container).addView(views.get(position%views.size()), 0);  
            return views.get(position%views.size());  
        }  
  
        /**
         * 是否将显示的ViewPager页面与instantiateItem返回的对象进行关联
         * 这个方法是必须实现的
         */
        @Override  
        public boolean isViewFromObject(View view, Object object) {  
            return view == object;  
        }  
    }



展开
收起
爱吃鱼的程序员 2020-06-22 10:41:27 478 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    getCount为何是Integer. MAX_VALUE

    如果设为views.size()就不能循环滑动了,设成这样能造成循环滑动的假象请问楼主解决了吗?我也有同样的问题!今天才发现这个问题所在,备注一下:ViewPager默认情况下,比如有1,2,3,4页面,从2滑到3时,是先执行1的destroy,再执行4的 instantiateItem,然而 从3滑到2时,是先执行1的 instantiateItem,再执行4的 destroy,所以当只有3个页面时,想重用,后一种滑动时,即手指左滑,会报view被添加过的错请问LZ最后解决了这个问题吗?是把views的长度增加吗?
    2020-06-22 10:41:45
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
58同城Android客户端Walle框架演进与实践之路 立即下载
Android组件化实现 立即下载
蚂蚁聚宝Android秒级编译——Freeline 立即下载