写点什么

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

作者:芝麻粒儿
  • 2022 年 7 月 06 日
  • 本文字数:1289 字

    阅读完需:约 4 分钟

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

👉关于作者

众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣!!!专注于 Android/Unity 和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等)

👉即将学会

解决 Bug,哈哈——Bug 使人心碎。

👉背景

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

🙎小芝:就是我提出的哎。

🙈小空:嗯......

👉实践过程

Bug:

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

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

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

第一个问题的原因:

  1. 页面数=1 时,页面静止; 

  2. 页面数=>2 时,页面滑动不会产生空白 

  3. 无限循环的 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 适配器已经做出来了,本来还有很多东西,监听,导航介绍,滚动圆点页码等等就不多做介绍了!

👉其他

📢作者:小空和小芝中的小空

📢转载说明-务必注明来源:https://www.infoq.cn/profile/DB2492B85795C4/publish

📢这位道友请留步☁️,我观你气度不凡,谈吐间隐隐有王者霸气💚,日后定有一番大作为📝!!!旁边有点赞👍收藏🌟今日传你,点了吧,未来你成功☀️,我分文不取,若不成功⚡️,也好回来找我。

发布于: 刚刚阅读数: 4
用户头像

芝麻粒儿

关注

尺有所短;寸有所长。 2020.08.29 加入

👑CSDN博客专家-华为云享专家-Android/Unity领域优质作者 🏅目前在模拟医学行业做Android/Unity双端开发 🏆微信公众号:【空名先生】 🏆QQ交流群:204918251或877807592

评论

发布
暂无评论
Android 无限循环ViewPager滑动空白Bug及报错跳坑_android_芝麻粒儿_InfoQ写作社区