ViewPager 无限滑动,往回滑动异 4000 常
2016-08-11 22:08
363 查看
在实现ViewPager的无限滑动时,遇到了个小坑。往前滑动的时候没有问题,而当我往回滑动的时候程序崩溃掉。
下面的是出现问题的代码:
MainActivity.java
适配器 MyAdapter.java
下面是错误提示:
代码报错的地方:
只需要把:
加上一个图片资源即可:
经过分析,因为当viewpager页面添加的时候,默认是添加3页(当前显示页面,前一页,和后一页),当ViewPager往前滑动的时候,比如手机当前显示的是第1页(从第0页开始),这时viewpager里有第0,1,2三个对象。当viewpager前滑动到第2页的时候,是先移除第0页的对象,然后在右边重复添加第0页的对象。所以不会出现问题。
而当往回滑动的时候,是先添加再移除。当显示的页面处于第2页的时候,此时在第2页左右分别添加有第1页和第0页,所以当往回滑动的时候,会添加第0页,但是此时第0页的对象还在第2页右边的容器中,所以会造成第0页添加不到对象而出错。
下面的是出现问题的代码:
MainActivity.java
public class MainActivity extends Activity { private ViewPager viewPager; private int []images={R.drawable.slide1,R.drawable.slide2,R.drawable.slide3}; private List<View> list; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); viewPager = (ViewPager) findViewById(R.id.viewPager); list=new ArrayList<>(); for (int i = 0; i < images.length; i++) { ImageView imageView=new ImageView(this); imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); imageView.setImageResource(images[i]); list.add(imageView); } MyAdapter adapter=new MyAdapter(list); viewPager.setAdapter(adapter); } }
适配器 MyAdapter.java
public class MyAdapter extends PagerAdapter { private List<View> list; public MyAdapter(List<View> list) { this.list = list; } @Override public int getCount() { return Integer.MAX_VALUE; } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } @Override public Object instantiateItem(ViewGroup container, int position) { View view = list.get(position % list.size()); container.addView(view); return view; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView(list.get(position % list.size())); } }
下面是错误提示:
代码报错的地方:
只需要把:
private int []images={R.drawable.slide1,R.drawable.slide2,R.drawable.slide3};
加上一个图片资源即可:
private int []images={R.drawable.slide1,R.drawable.slide2,R.drawable.slide3,R.drawable.slide4};
经过分析,因为当viewpager页面添加的时候,默认是添加3页(当前显示页面,前一页,和后一页),当ViewPager往前滑动的时候,比如手机当前显示的是第1页(从第0页开始),这时viewpager里有第0,1,2三个对象。当viewpager前滑动到第2页的时候,是先移除第0页的对象,然后在右边重复添加第0页的对象。所以不会出现问题。
而当往回滑动的时候,是先添加再移除。当显示的页面处于第2页的时候,此时在第2页左右分别添加有第1页和第0页,所以当往回滑动的时候,会添加第0页,但是此时第0页的对象还在第2页右边的容器中,所以会造成第0页添加不到对象而出错。
相关文章推荐
- Ruby中的异常处理代码编写示例
- SQL Server 2005 中使用 Try Catch 处理异常
- MySQL抛出Incorrect string value异常分析
- Android App开发中ViewPager组件的入门使用教程
- 浅谈C#中简单的异常引发与处理操作
- 详解C#编程中异常的创建和引发以及异常处理
- 详解JavaScript中的异常处理方法
- java程序中的延时加载异常及解决方案
- 解析Java异常的栈轨迹及其相关方法
- .NET(C#):Emit创建异常处理的方法
- windows7服务器上weblogic启动失败异常解决方法
- 使用ViewPager实现高仿launcher左右拖动效果
- 有关ajax的error与后台的异常问题解决
- 深入探讨JAVA中的异常与错误处理
- GO语言异常处理机制panic和recover分析
- 浅谈JAVA 异常对于性能的影响
- 解析C++编程中的bad_cast异常
- Android App中用Handler实现ViewPager页面的自动切换
- Java中的异常测试框架JUnit使用上手指南
- Android应用中使用ViewPager实现类似QQ的界面切换效果