300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > Android架构师谈:View-Pager-性能优化之-无限循环

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

时间:2019-10-22 13:33:28

相关推荐

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

作者:享学课堂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中修改

@Overridepublic Fragment getItem(int i) {return fragmentList.get(i% fragmentList.size());}@Overridepublic 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:

@Overridepublic 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大专题分类】

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。