文章說明
本文修改自answerzhao_
scdn:
開發者者公眾平台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物件。
優點:完全遮蔽預載入
缺點:稍微複雜,但是人家已經造好的輪子,直接用吧,很簡潔
開源庫:
這個庫就4個類,作者通過繼承viewpager(保證其普適性)、自定義viewpageradapter和 lazyfragmentpageradapter以及設定懶載入的標記介面,很好的實現了懶載入。感謝作者。
在此貼出關鍵**,有興趣的同學可以學習下。
lazyviewpager:
參考 平台特色:每日諮詢,專屬老司機開車,猿裡來汙裡去。
致謝:鴻洋、汙力少女醬、稀土掘金等平台
ViewPager實現Fragment懶載入
通過在onpagechangelistener中呼叫懶載入,當fragment切換到下乙個或者切換中進行懶載入。1 先寫乙個介面 原因 1 隔離具體實現 不依賴具體fragment,否則在用的時候就需要乙個乙個對具體實現進行判斷 2 僅處理需要懶載入的fragment public inte ce ...
記 ViewPager2實現懶載入的嘗試
用到的控制項 viewpager2 fragment tablayout 首先是介面卡,需要的介面卡是繼承自fragmentmanager,並且實現構造方法和createfragment getitemcount兩個方法。這些都比較簡單。第二步載入介面卡,mviewpager2.setadapter...
懶載入分析情況
延遲載入也稱懶載入,他是hibernate為提高執行效率而提供的一種機制,即只有真正使用該物件的資料是才會建立。hibernate中主要是通過 proxy 機制來實現延遲載入的。它的具體過程是hibernate從資料庫獲取某乙個物件的資料時,獲取某乙個物件的集合屬性值時,或獲取某乙個所關聯的另乙個物...