轉載
雖然ViewPager中提供的有setOffscreenPageLimit()來控制其預加載的數(shù)目,但是當設置為0后我們發(fā)現(xiàn)其根本沒效果,這個的最小值就是1,也就是你只能最少前后各預加載一頁。
方法一
在Fragment可見時請求數(shù)據(jù)。此方案仍預加載了前后的頁面,但是沒有請求數(shù)據(jù),只有進入到當前Framgent時才請求數(shù)據(jù)。
優(yōu)點:實現(xiàn)了數(shù)據(jù)的懶加載
缺點:一次仍是三個Framgment對象,不是完全意義的懶加載
方法二
直接修改ViewPager源碼。通過查看ViewPager源碼可知,控制其預加載的是一個常量
DEFAULT_OFFSCREEN_PAGES,其默認值為1,表示當前頁面前后各預加載一個頁面,在這里我們直接將其設置為0即可,即去掉預加載。但是,這樣有一個問題,那就是在使用其他控件時需要傳入ViewPager時,這個就不能用了。
優(yōu)點:完全屏蔽掉了預加載
缺點:應用太受限制,比如使用ViewPagerIndicator時需要傳入ViewPager對象,這時傻眼了。
方法三
直接繼承ViewPager,結合PagerAdapter實現(xiàn)懶加載。該方案是我用到的最完善的方法,完全的懶加載,每次只會建立一個Fragment對象。
優(yōu)點:完全屏蔽預加載
缺點:稍微復雜,但是人家已經(jīng)造好的輪子,直接用吧,很簡潔
開源庫:https://github.com/lianghanzhen/LazyViewPager