Android 无限循环ViewPager报错跳坑。
2016-06-14 16:46
567 查看
经常我们在项目中会使用ViewPager这个是谷歌嵌套在V4包里的控件,往往在使用的时候,我们有一些要求,比如可以向前无限循环,向后无限循环,而这种无限循环基本是伪无限循环,虽然是伪循环,但是能满足大部分需要,这里就简单的介绍一下ViewPager的一些坑。 百度上面找了下,找了很久始终未找到足够完美,或者说简洁的ViewPager适配器代码,因此我也下载了几个 DEMO测试,无限循环的ViewPager在轮滑页面低于3个时,总是会报错。 首先我们要明白报错是为什么,如何解决,大部分原因应该都是父类Parent引起的,因为同一个View不能同时使用一个父Parent,经过测试,在addView和removeView方法时就会报错,网上方法:
// // 取得view的父组件,然后移除view ViewGroup parent = (ViewGroup) v.getParent(); if (parent != null) { parent.removeAllViews(); }
在加载移除时,加上如下代码,虽然不报错了,但是滑动的时候会导致其他页面里全是空页面,为加载出我们想要的视图,显然这不是我们想要的效果,下面贴出我自己写的适配器代码,如有BUG,欢迎提交。
@Override public boolean isViewFromObject(View view, Object object) { return view == object; } @Override public Object instantiateItem(ViewGroup container, int position) { View v = list.get(position % list.size()); ViewGroup parent = (ViewGroup) v.getParent(); if (parent != null) { parent.removeView(v); } container.addView(v); return v; } @Override public void destroyItem(ViewGroup container, int position, Object object) { } @Override public int getCount() { if (list == null) { return 0; } return Integer.MAX_VALUE; }
虽然这里返回了Integer.MAX_VALUE,经过实测我们在设置显示页码的时候并不能选取我们想要的Integer.MAX_VALUE/2 ,这个错误难道是因为数字太大?不过实际使用中我们并不需要设置得那么远,页码完全够用就行。
//设置当前想要显示的页码 pager.setCurrentItem(10000 - (10000 % list.size()));
一个无限循环的ViewPager适配器已经做出来了,本来还有很多东西,监听,导航介绍,滚动圆点页码等等我封装在一起了,贴出来怕代码太多乱了大家思绪,所以这里暂时就写到这里,如有疑问,欢迎留言!
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories