日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

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

發(fā)布時間:2023/11/30 Android 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android架构师谈:View-Pager-性能优化之-无限循环 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

作者:享學(xué)課堂Alvin老師

轉(zhuǎn)載請聲明出處!

ViewPager實現(xiàn)無限滑動

**方案一:**將viewpager上限設(shè)置成一個很大的數(shù),第一個頁面設(shè)置到中間。然后滑動的時候,用當前的序號與viewpager頁面數(shù)取余得到目標頁面的序號,然后顯示出來。理論上一個人不會無聊到一直左滑或者右滑。因此可以模擬無限循環(huán)。

**方案二:**假設(shè)viewpager中有四個頁面,分別為A、B、C、D。然后在A左邊添加一個頁面D,在D右邊添加一個頁面A,變成 D、A、B、C、D、A。當滑到D時跳轉(zhuǎn)到D,滑到A時跳轉(zhuǎn)到A。

第一種并不是實現(xiàn)了真正意義上的無限循環(huán),但是效果比較好,頁面切換的時候也不會出現(xiàn)跳轉(zhuǎn)閃爍的情況。

第二種雖然是真正的無限循環(huán),但是需要在開頭結(jié)尾添加元素,這樣就會造成其他問題,比如圖片下方跟隨圖片切換的小圓點的設(shè)置就會比較復(fù)雜。更新數(shù)據(jù)的時候也比較費勁。而且還會在切換頁面時出現(xiàn)閃爍,影響用戶體驗。因此選擇第一種實現(xiàn)方案。

第一種方案又會有兩種實現(xiàn):實現(xiàn)A,實現(xiàn)B

實現(xiàn)A:

實現(xiàn)過程:直接在getItem和 getCount中修改

@Override public Fragment getItem(int i) {return fragmentList.get(i% fragmentList.size()); } @Override public int getCount() {return Integer.MAX_VALUE; }

暴露異常:出現(xiàn)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 數(shù)量不能低于4個,給viewPager添加了一個fragment問題解決。

實現(xiàn)B:

同樣的,讓后再Fragment 數(shù)量是4個的基礎(chǔ)上繼續(xù)實現(xiàn)方案的另一個實現(xiàn)B:

@Override public Fragment getItem(int i) {//在這里不處理position的原因是因為getItem方法在 //instantiateItem方法中調(diào)用。只要在調(diào)用前處理 //position即可,以免重復(fù)處理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); }

以上實現(xiàn)A和實現(xiàn)B均只能實現(xiàn)右滑的效果,無法實現(xiàn)無限左滑,這個是為什么呢?

解決辦法,在ViewPager配置的地方添加一行代碼:

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

這樣就解決了不能左滑的問題,因為用戶不會死死的循環(huán)幾百次,而這個數(shù)字確實可以保證用戶左右死循環(huán)般的存在。

最后

一次偶然,從朋友那里得到一份“java高分面試指南”,里面涵蓋了25個分類的面試題以及詳細的解析:JavaOOP、Java集合/泛型、Java中的IO與NIO、Java反射、Java序列化、Java注解、多線程&并發(fā)、JVM、Mysql、Redis、Memcached、MongoDB、Spring、Spring Boot、Spring Cloud、RabbitMQ、Dubbo 、MyBatis 、ZooKeeper 、數(shù)據(jù)結(jié)構(gòu)、算法、Elasticsearch 、Kafka 、微服務(wù)、Linux。

這不,馬上就要到招聘季了,很多朋友又開始準備“金三銀四”的春招啦,那我想這份“java高分面試指南”應(yīng)該起到不小的作用,所以今天想給大家分享一下。

請注意:關(guān)于這份“java高分面試指南”,每一個方向?qū)n}(25個)的題目這里幾乎都會列舉,在不看答案的情況下,大家可以自行測試一下水平 且由于篇幅原因,這邊無法展示所有完整的答案解析

這份“java高分面試指南”,每一個方向?qū)n}(25個)的題目這里幾乎都會列舉,在不看答案的情況下,大家可以自行測試一下水平 且由于篇幅原因,這邊無法展示所有完整的答案解析

資料領(lǐng)取方式:點擊【java高分面試指南-25大專題分類】

總結(jié)

以上是生活随笔為你收集整理的Android架构师谈:View-Pager-性能优化之-无限循环的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。