ViewPager实现无限滑动

方案一:将viewpager上限设置成一个很大的数,第一个页面设置到中间。然后滑动的时候,用当前的序号与viewpager页面数取余得到目标页面的序号,然后显示出来。理论上一个人不会无聊到一直左滑或者右滑。因此可以模拟无限循环。

方案二:假设viewpager中有四个页面,分别为A、B、C、D。然后在A左边添加一个页面D,在D右边添加一个页面A,变成 D、A、B、C、D、A。当滑到D时跳转到D,滑到A时跳转到A。

第一种并不是实现了真正意义上的无限循环,但是效果比较好,页面切换的时候也不会出现跳转闪烁的情况。

第二种虽然是真正的无限循环,但是需要在开头结尾添加元素,这样就会造成其他问题,比如图片下方跟随图片切换的小圆点的设置就会比较复杂。更新数据的时候也比较费劲。而且还会在切换页面时出现闪烁,影响用户体验。因此选择第一种实现方案。

第一种方案又会有两种实现:实现A,实现B

实现A:

实现过程:直接在getItem和 getCount中修改

@Override

public Fragment getItem(int i) {

return fragmentList.get(i% fragmentList.size());

}

@Override

public int getCount() {

return Integer.MAX_VALUE;

}

暴露异常:出现bug

java.lang.IllegalStateException: Fragment already active

at android.support.v4.app.Fragment.setInitialSavedState(Fragment.java:620)

at android.support.v4.app.FragmentStatePagerAdapter.instantiateItem(FragmentStatePagerAdapter.java:117)

修改方案: Fragment 数量不能低于4个,给viewPager添加了一个fragment问题解决。

实现B:

同样的,让后再Fragment 数量是4个的基础上继续实现方案的另一个实现B:

@Override

public Fragment getItem(int i) {

//在这里不处理position的原因是因为getItem方法在

//instantiateItem方法中调用。只要在调用前处理

//position即可,以免重复处理

return fragmentList.get(i);

}

@NonNull

@Override

public Object instantiateItem(@NonNull ViewGroup container, int position) {

position = position % fragmentList.size();

return super.instantiateItem(container, position);

}

@Override

public int getCount() {

return Integer.MAX_VALUE;

}

@Override

public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {

position = position % fragmentList.size();

super.destroyItem(container, position, object);

}

以上实现A和实现B均只能实现右滑的效果,无法实现无限左滑,这个是为什么呢?

解决办法,在ViewPager配置的地方添加一行代码:

mViewPager.setCurrentItem(fragmentList.size() * 100);

这样就解决了不能左滑的问题,因为用户不会死死的循环几百次,而这个数字确实可以保证用户左右死循环般的存在。

推荐阅读:

死磕设计模式之单例模式

一篇文章带你领略Android混淆的魅力

Android前沿技术探讨:ClassLoader在热修复中的应用

今日课题:

↑点击图片直接跳转观看免费直播课程↑

↑点击图片直接跳转观看免费直播课程↑

android viewpager 复杂指示器_View Pager 性能优化之 无限循环相关推荐

  1. android viewpager动态加载页面,Android viewpager中动态添加view并实现伪无限循环的方法...

    本文实例讲述了Android viewpager中动态添加view并实现伪无限循环的方法.分享给大家供大家参考,具体如下: viewpager的使用,大家都熟悉,它可以实现页面之间左右滑动的切换,这里 ...

  2. Android架构师谈:View-Pager-性能优化之-无限循环

    作者:享学课堂Alvin老师 转载请声明出处! ViewPager实现无限滑动 **方案一:**将viewpager上限设置成一个很大的数,第一个页面设置到中间.然后滑动的时候,用当前的序号与view ...

  3. ViewPager -- Fragment 切换卡顿 性能优化

    当ViewPager切换到当前的Fragment时,Fragment会加载布局并显示内容,如果用户这时快速切换ViewPager,即 Fragment需要加载UI内容,而又频繁地切换Fragment, ...

  4. Android面试题(五)性能优化·1

    五.性能优化 根据用户的四个方面需求,总结如下: 追求流畅,防止卡顿 追求稳定,防止闪退 追求续航,防止耗损 追求精简,防止臃肿 常见性能检测工具:网易开源的Emmagee.腾讯开源的GT.科大讯飞的 ...

  5. 【Android】二维码识别性能优化

    背景: 发现公司App的二维码识别效率不高 一查,居然每次识别要耗差不多1s,好吧 可以好好优化下了.. 大部分的CaptureActivity.java都差不多 直接拿的原来的代码,用TraceVi ...

  6. Android:最全面详细的性能优化攻略(含内存优化、内存泄漏、绘制优化、布局优化、图片优化、APK优化、多线程优化、列表优化等)

    前言:佛教中有一句话:初学者的心态,拥有初学者心态是件了不起的事情.真正的大师永远怀有一颗学徒的心. 一.概述 在Android中,性能优化是细分领域中最难且也是知识面涉及最深和最广的方向之一. 更快 ...

  7. 【Android开发学习34】OpenGL 性能优化

    作者: Yang Jian (jyang@cad.zju.edu.cn) 日期: 2009-05-04 本文从硬件体系结构.状态机.光照.纹理.顶点数组.LOD.Cull等方面分析了如何优化 Open ...

  8. 菜鸟要做架构师(二)——java性能优化之for循环

    完成同样的功能,用不同的代码来实现,性能上可能会有比较大的差别,所以对于一些性能敏感的模块来说,对代码进行一定的优化还是很有必要的.今天就来说一下java代码优化的事情,今天主要聊一下对于for(wh ...

  9. [Android]ListView控件之Adapter性能优化

    Google在Google I/O大会上,提到Android在UI优化方面可以从以下五个方面入手:   Adapter优化  背景和图片优化 绘图优化 视图和布局优化 内存分配优化 1.Adapter ...

最新文章

  1. Session机制二(简易购物车案例)
  2. yii2 引入php文件,Yii2中YiiBase自动加载类、引用文件方法分析(autoload)
  3. Kattis-What does the fox say 字符串处理+STL
  4. ps -aux 和ps -elf 区别(查看进程)
  5. springboot单例模式注入对象_Spring 中经典的 9 种设计模式,打死也要记住啊!
  6. ubuntu系统4G卡上网操作图解
  7. 递归、os.walk、内置函数、lambda、hashlib模块、md5加密、python安装第三方模块、操作mysql数据库...
  8. 华为-2025十大趋势:智能世界,触手可及.pdf(附下载链接)
  9. 5G到来,App的未来,是JavaScript,Flutter还是Native ?
  10. Java连接数据库——JDBC的快速入门
  11. 直播行业迎来多元化发展
  12. mysql宠物店java_javajdbc宠物商店-Mysql数据库
  13. windows控制台命令: 快捷键大集合
  14. Ubuntu18.04 常用软件推荐
  15. 倚杖听江声夜雨剪春韭
  16. weblogic绿色版安装
  17. 初入社会戏人生-初面试介绍
  18. 内网穿透方法有哪些?路由器端口映射外网和软件方案步骤
  19. Android OpenGLES3.0 开发 :光照基础
  20. java 切换系统输入法,Android7.0更换系统默认输入法

热门文章

  1. nginx-lua-openresty-graphicsmagick 下载远程图片,本地缩图红缓存加水印
  2. 利用Mono.Cecil动态修改程序集来破解商业组件(仅用于研究学习)
  3. JavaFX打包工具(javafxpackager)
  4. 自学笔记:setTag、getTag
  5. C# WinForm获取当前路径汇总
  6. 实验问题总结与分享之×××(Virtual Private Network)
  7. BCH再迎升级,真正比特币即将归来!
  8. MySQL show processlist说明
  9. 一分钟就可以轻松将文字转换成语音,简单方法讲解
  10. Zookeeper之javaAPI的使用