作者:享学课堂Alvin老师

转载请声明出处!

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 activeat 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@Overridepublic Object instantiateItem(@NonNull ViewGroup container, int position) {position = position % fragmentList.size();return super.instantiateItem(container, position);
}
@Overridepublic int getCount() {return Integer.MAX_VALUE;
}
@Overridepublic 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);

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

最后

一次偶然,从朋友那里得到一份“java高分面试指南”,里面涵盖了25个分类的面试题以及详细的解析:JavaOOP、Java集合/泛型、Java中的IO与NIO、Java反射、Java序列化、Java注解、多线程&并发、JVM、Mysql、Redis、Memcached、MongoDB、Spring、Spring Boot、Spring Cloud、RabbitMQ、Dubbo 、MyBatis 、ZooKeeper 、数据结构、算法、Elasticsearch 、Kafka 、微服务、Linux。

这不,马上就要到招聘季了,很多朋友又开始准备“金三银四”的春招啦,那我想这份“java高分面试指南”应该起到不小的作用,所以今天想给大家分享一下。

请注意:关于这份“java高分面试指南”,每一个方向专题(25个)的题目这里几乎都会列举,在不看答案的情况下,大家可以自行测试一下水平 且由于篇幅原因,这边无法展示所有完整的答案解析

这份“java高分面试指南”,每一个方向专题(25个)的题目这里几乎都会列举,在不看答案的情况下,大家可以自行测试一下水平 且由于篇幅原因,这边无法展示所有完整的答案解析

资料领取方式:点击【java高分面试指南-25大专题分类】

Android架构师谈:View-Pager-性能优化之-无限循环相关推荐

  1. android viewpager 复杂指示器_View Pager 性能优化之 无限循环

    ViewPager实现无限滑动 方案一:将viewpager上限设置成一个很大的数,第一个页面设置到中间.然后滑动的时候,用当前的序号与viewpager页面数取余得到目标页面的序号,然后显示出来.理 ...

  2. 阿里Java架构师精通资料:性能优化+亿级并发架构汇总+架构选型

    分布式并发架构 微服务.Docker容器的基本原理.架构设计,以及应用场景. 缓存:Redis.Memcached.CDN.本地缓存 搜索引擎的选型:Lucene.Solr等选型与比较 应用服务器雪崩 ...

  3. 资深架构师手把手教你性能优化

    图片来源:pexels.com 孔庆龙,一线架构师,具有多年的金融架构经验,具备 SOA 服务化.服务治理.系统优化.分布式系统项目经验.目前关注于互联网金融技术架构设计.分布式架构.微服务架构.De ...

  4. 阿里P8架构师谈:Web前端、应用服务器、数据库SQL等性能优化总结

    web前端性能优化 Web前端指网站业务逻辑之前的部分,包括: 1.浏览器加载 2.网站视图模型 3.图片服务 4.CDN服务等 主要优化手段有优化浏览器访问,使用反向代理,CDN等. 1.浏览器访问 ...

  5. 阿里P8架构师谈:多线程、架构、异步消息、Redis等性能优化策略

    常见性能优化策略分类 1.代码 之所以把代码放到第一位,是因为这一点最容易引起技术人员的忽视.很多技术人员拿到一个性能优化的需求以后,言必称缓存.异步.JVM等.实际上,第一步就应该是分析相关的代码, ...

  6. psql where里有自定义函数慢_阿里P8架构师谈:MySQL慢查询优化、索引优化、以及表等优化总结...

    MySQL优化概述 MySQL数据库常见的两个瓶颈是:CPU和I/O的瓶颈. CPU在饱和的时候一般发生在数据装入内存或从磁盘上读取数据时候. 磁盘I/O瓶颈发生在装入数据远大于内存容量的时候,如果应 ...

  7. 阿里P7架构师谈:MySQL慢查询优化、索引优化、以及表等优化总结

    MySQL优化概述 MySQL数据库常见的两个瓶颈是:CPU和I/O的瓶颈. CPU在饱和的时候一般发生在数据装入内存或从磁盘上读取数据时候. 磁盘I/O瓶颈发生在装入数据远大于内存容量的时候,如果应 ...

  8. 阿里P8架构师谈:数据库、JVM、缓存、SQL等性能调优方法和原则

    编辑 性能优化基本是BAT等一线互联网公司程序员必备的技能,以下为大家完整揭晓性能完整的优化方案和方法:包含web网站调优.数据库.JVM调优.架构调优等方案. 第一:Web网站调优 1.尽可能减少H ...

  9. 阿里P8架构师谈:MySQL慢查询优化、索引优化、以及表等优化总结

    MySQL优化概述 MySQL数据库常见的两个瓶颈是:CPU和I/O的瓶颈. CPU在饱和的时候一般发生在数据装入内存或从磁盘上读取数据时候. 磁盘I/O瓶颈发生在装入数据远大于内存容量的时候,如果应 ...

最新文章

  1. 【C++】C++11 STL算法(二):修改序列的操作(Modifying sequence operations)
  2. 混合深度卷积,更少参数下的轻量级网络
  3. greta的问题及解决: LIBCMTD.lib(_wctype.obj) : error LNK2005: _iswspace already defined in xxx.obj...
  4. PYTHON作业----编写多级菜单
  5. 小型机oracle命令,Oracle小型机如何选型
  6. 团队项目:过山车游戏的设想
  7. 编写一个成绩分类程序
  8. foobar2000 常用插件搜集
  9. 易语言精益模块json_易语言Json解析
  10. steam搬砖项目超完整版实操免费分享
  11. idea退出debug模式_一文搞懂如何在Intellij IDEA中使用Debug,超级详细
  12. 业务关键路径最小成本试错《精益创业》
  13. 嵌入式系统设计师需要掌握什么
  14. Android Espresso(一)——环境建立
  15. 淘宝天猫店招空白间隔去除
  16. mysql server安装服务器_MySQL安装
  17. Jacob操作Word文档转换-XXOO
  18. 制作ESXI6.7U盘安装盘
  19. java-net-php-python-jspm校园闲鱼网站计算机毕业设计程序
  20. 一文了解linux 内核模块 强制卸载

热门文章

  1. 文件上传 带进度条(多种风格)
  2. php yii2 获取表里最大的id_Yii2中自带分页类实现分页
  3. python安装哪个版本好啊_windows10安装哪个版本的Python?
  4. mysql 包 过程 job_mysql job实例全过程
  5. java struts2 excel上传_文件上传方法,使用Struts2,实现Excel文件读取并写入数据库技术...
  6. linux查看进程运行日志文件,【Linux】常用指令、ps查看进程、kill杀进程、启动停止tomcat命令、查看日志、查看端口、find查找文件...
  7. python字符串转date,在Python上将字符串转换为Date类型
  8. elementui下拉框 清空_巧妙解决element-ui下拉框选项过多的问题
  9. java自己实现ioc_springioc原理、springmvc项目分析、自己实现IOC
  10. 单片机c语言 i%3c%3c1,单片机C语言作业及上机习题及答案