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中修改

@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高分面试指南”应该起到不小的作用,所以今天想给大家分享一下。

image

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/386076.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

你知道如何用面向对象思想写好并发编程吗?

在工作中,我发现很多人在设计之初都是直接按照单线程的思路来写程序的,而忽略了本应该重视的并发问题;等上线后的某天,突然发现诡异的 Bug,再历经千辛万苦终于定位到问题所在,却发现对于如何解决已经没有了…

你知道怎么在生产环境下部署tomcat吗?

享学课堂特邀作者:老顾 转载请声明出处! 一、前言 小伙伴们在网上看到的很多文章,都是对tomcat的一些介绍,什么配置啊,怎么启动。其实在生产环境中怎么部署,和网上介绍的有很大区别。这篇文章老顾就带着大…

浅谈HashMap

Java集合类的整体架构 比较重要的集合类图如下: 有序否 允许元素重复否 Collection 否 是 List 是 是 Set AbstractSet 否 否 HashSet TreeSet 是(用二叉树排序) Map AbstractMap 否 使用 key-value 来映射和存储数据, Key 必须惟…

matlab实现一元线性回归和多元线性回归

在回归分析中,如果有两个或两个以上的自变量,就称为多元回归。事实上,一种现象常常是与多个因素相联系的,由多个自变量的最优组合共同来预测或估计因变量,比只用一个自变量进行预测或估计更有效,更符合实际。 在实际经济问题中,一个变量往往受到多个变量的影响。例如,家…

互联网寒冬!“996”为什么还没实行?我还等着早点下班呢!

“喊了十多个月的‘996’,说要实行‘996’,上班上到现在,影子都没看到,我还能早点下班吗?” 我一个在广州上班的朋友小李,在我去广州出差期间,与他聊天的时候发出了这样的牢骚,我刚…

matlab求解常微分方程组/传染病模型并绘制SIR曲线

看了很多关于传染病模型的matlab程序,大都是绘制出两条曲线(I、S)的,本文最大的不同是绘出SIR三条曲线。 先给出SIR微分方程组 函数文件: run的程序:

互联网寒冬!技术站最全MySQL数据库实战规范

享学课堂特邀作者:老顾 转载请声明出处! 前言 我们小伙伴们经常使用到mysql数据库,一般就这么一用,很少会考虑mysql里面的细节问题,如sql语句的规范,或索引有没有起到相应的效果,今天老顾就给大…

SQL求一个表中非重复数据及其出现的次数

mysql中,我们可以用distinct求不重复的数据有多少,也可以用group by。 这里有个例子,如下表sheet1,共有5411条数据 查询语句 共有3446条不重复数据,每条不重复数据出现的次数在第二列显示:

什么是微服务扩展性和高可用-可扩展性、高可用性和性能

欢迎关注专栏:Java架构技术进阶。里面有大量batj面试题集锦,还有各种技术分享,如有好文章也欢迎投稿哦。 Overview 可扩展性、高可用性和性能 术语可扩展性、高可用性、性能和关键任务对于不同的组织或组织内的不同部门来说可能意味着不同的…

SQL实现当前行等于前面两行数据之和

sql实现类似斐波那契数列的功能,即当前数据等于前面两个数据之和,详看本文例子 原表: sql语句(此处要熟悉JION ON的用法) 结果

【大牛系列教学】靠着这份面试题跟答案

开篇闲扯 打工人,打工魂,我们生而人上人。当“资本主义”逐渐禁锢我们人(大)上(韭)人(菜)肉体的时候,那一刻我才明白那个日不落帝国资本主义收割机瑞民族之光幸瑞幸咖啡…

matlab实现二项分布

二项分布 1. 求n次独立重复试验中事件A恰好发生k次的概率P。 命令:pdf 或 binopdf 格式:pdf (‘bino’, k, n, p) 或 binopdf (k, n, p) 说明:该命令的功能是计算二项分布中事件A恰好发生k次的概率。pdf为通用函数,bino表示二项分布,binopdf为专用函数,n为试验总次数,…

【工作感悟】成功入职阿里月薪45K

前言 苦苦寻觅找工作之间,殊不知今日之时乃我心之痛,难道是我不配拥有工作嘛。自面试后他所谓的等待都过去一段时日,可惜在下京东上的小金库都要见低啦。每每想到不由心中一紧。正处为难之间,手机忽然来了个短信预约后续面试。 我…

Mysql优化技巧

索引优化,查询优化,查询缓存,服务器设置优化,操作系统和硬件优化,应用层面优化(web服务器,缓存)等等。这里的记录的优化技巧更适用于开发人员,都是从网络上收集和自己整理…

【工作经验分享】不会真有人觉得mybatis很难学吧

什么是自旋锁和互斥锁? 由于CLH锁是一种自旋锁,那么我们先来看看自旋锁是什么? 自旋锁说白了也是一种互斥锁,只不过没有抢到锁的线程会一直自旋等待锁的释放,处于busy-waiting的状态,此时等待锁的线程不会…

华为面试题

技术面试: java: java学了几年,看过什么书,有没有看过thinking in java这本书 java的公共父类是什么,object类中有什么方法 object中有个hashcode方法,这个方法是用来做什么的, equal 与 的区…

【工作经验分享】这些新技术你们都知道吗

前言 近年来,微服务架构(Microservices Architecture)已经成为一种主流的软件开发方法论,所谓微服务( Microservices ),就是一些具有足够小的粒度、能够相互协作且自治的服务体系。 微服务架构基于分布式系统,同时借助了面向服务架构和企业服…

京东面试题(JAVA)

京东17号一面问题与回答情况(Java岗) 作者:牛客190525号 Q1: HashMap的原理, 以及HashMap如何扩充bucket的大小 A1: 原理答上来了,如何扩容瞎答的,之前不知道扩容之后已经哈希的MapEntry如何处理,当时就…

【微信小程序】使用Hystrix的插件机制

前言 在本篇文章开始前,我想想来回答一个问题:我为什么要写这一篇关于面试的文章? 原因有三:第一,我想为每一个为梦想时刻准备着的”有心人“尽一份自己的力量,提供一份高度精华的Java面试清单&#xff1…

大话数据结构——数据结构绪论

数据:描述客观事物的符号,是计算机可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合。 有两个要素: 可以输入到计算机中能被计算机程序处理 数据元素:组成数据的基本单位,也就…