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.pswp.cn/news/386076.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/386076.shtml
英文地址,請注明出處:http://en.pswp.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…

大話數據結構——數據結構緒論

數據:描述客觀事物的符號,是計算機可以操作的對象,是能被計算機識別,并輸入給計算機處理的符號集合。 有兩個要素: 可以輸入到計算機中能被計算機程序處理 數據元素:組成數據的基本單位,也就…