1. 程式人生 > >ViewPager懶載入分析推薦

ViewPager懶載入分析推薦

這裡寫圖片描述

文章說明
本文修改自AnswerZhao_
SCDN:http://blog.csdn.net/baidu_26654149/

開發者者公眾平臺Chian-dvlp

如果你有想學習的文章直接關注公眾號(開發者原始碼)回覆,我會整理徵稿。如果你有好的文章想和大家分享歡迎投稿,直接向我回覆文章連結即可。

*
概述

  在專案中ViewPager和Fragment介面框架已經是處處可見,但是在使用中,我們肯定不希望使用者在當前頁面時就在前後頁面的資料,加入資料量很大,而使用者又不願意左右滑動瀏覽,那麼這時候ViewPager中本來充滿善意的預載入就有點令人不爽了。我們能做的就是遮蔽掉ViewPager的預載入機制。

  雖然ViewPager中提供的有setOffscreenPageLimit()來控制其預載入的數目,但是當設定為0後我們發現其根本沒效果,這個的最小值就是1,也就是你只能最少前後各預載入一頁。那麼,這時候就得另覓方法了。

  以下三種方法是我在學習和專案中嘗試過的,需求實現了,但各有千秋,可結合不同場景使用。因為打算慢慢養成寫部落格的習慣,就總結在此,也希望對他人有所借鑑。

1
方法一

在Fragment可見時請求資料。此方案仍預載入了前後的頁面,但是沒有請求資料,只有進入到當前Framgent時才請求資料。

優點:實現了資料的懶載入
缺點:一次仍是三個Framgment物件,不是完全意義的懶載入

大致程式碼如下:

2
方法二

  直接修改ViewPager原始碼。通過檢視ViewPager原始碼可知,控制其預載入的是一個常量

DEFAULT_OFFSCREEN_PAGES,其預設值為1,表示當前頁面前後各預載入一個頁面,在這裡我們直接將其設定為0即可,即去掉預載入。但是,這樣有一個問題,那就是在使用其他控制元件時需要傳入ViewPager時,這個就不能用了。

優點:完全遮蔽掉了預載入
缺點:應用太受限制,比如使用ViewPagerIndicator時需要傳入ViewPager物件,這時傻眼了。

大致程式碼如下:

3
方法三

  直接繼承ViewPager,結合PagerAdapter實現懶載入。該方案是我用到的最完善的方法,完全的懶載入,每次只會建立一個Fragment物件。

優點:完全遮蔽預載入
缺點:稍微複雜,但是人家已經造好的輪子,直接用吧,很簡潔

開源庫:https://github.com/lianghanzhen/LazyViewPager

   這個庫就4個類,作者通過繼承ViewPager(保證其普適性)、自定義ViewPagerAdapter和 LazyFragmentPagerAdapter以及設定懶載入的標記介面,很好的實現了懶載入。感謝作者。

在此貼出關鍵程式碼,有興趣的同學可以學習下。
LazyViewPager:

最後提醒一下:填充LazyViewPager的Fragment一定要實現介面LazyFragmentPagerAdapter.Laziable。

參考
https://github.com/lianghanzhen/LazyViewPager

結束語:文章出自平臺:開發者原始碼
這麼多優質原始碼,想必大家早已看的眼花繚亂。
長按關注,方便下次閱讀。

平臺特色:每日諮詢,專屬老司機開車,猿裡來汙裡去。
致謝:鴻洋、汙力少女醬、稀土掘金等平臺

歡迎長按下圖->識別圖中二維碼或者掃一掃關注我的公眾號:

掃碼,get跟多優質原始碼關注公眾號:開發者原始碼