拉萨市建材网络科技有限公司
首页 | 联系方式 | 加入收藏 | 设为首页 | 手机站

产品目录

联系方式

联系人:业务部
电话: 00165-55511
邮箱:service@ydkmjgds.com

当前位置:首页 >> 产品展示 >> 默认分类 >> 正文

Android 无限循环ViewPager滑动空白Bug及报错跳坑

详细信息:

前天有个朋友丢来一张图 说viewpager的滑动出现问题 如下:

1.滑动的时候出现一张空白页

2.一个View同时使用了2个Parent

背景: 数据源只有2张图片,有伪无限轮播的实现 轮播点的实现

第一个问题的原因:

1、页面数=1时,页面静止;
2、页面数=>2时,页面滑动不会产生空白
无限循环的ViewPager在轮滑页面低于3个时,总是会报错

因此 我们可以模拟一些图片 基本思路:

图片数量为2的时候,按原图片顺序再依次添加,图片数翻倍变为4,防止出现空白页,但是轮播点的个数依然写为2

这样第一个问题有了解决基础(还未完),别急,接着看

百度上面找了下,找了很久始终未找到足够完美,或者说简洁的ViewPager适配器代码,因此我也下载了几个 DEMO测试,无限循环的ViewPager在轮滑页面低于3个时,总是会报错。
首先我们要明白报错是为什么,如何解决,大部分原因应该都是父类Parent引起的,因为同一个View不能同时使用不同父Parent,经过测试,在addView和removeView方法时就会报错,网上方法:

// // 取得view的父组件,然后移除view
 ViewGroup parent = (ViewGroup) v.getParent();
 if (parent != null) {
 parent.removeAllViews();
 }
在加载移除时,加上如下代码,虽然不报错了,但是滑动的时候会导致其他页面里全是空页面,为加载出我们想要的视图,显然这不是我们想要的效果

@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;
 }

问题解决!

这样一个无限循环的ViewPager适配器已经做出来了,本来还有很多东西,监听,导航介绍,滚动圆点页码等等就不多做介绍了!