為了達到界面效果,我們有時需要使用到TabLayout+ViewPager的方式來布局界面,然而ViewPager的adapter總是默認把與當前可見的fragment相鄰的兩個fragment給加載出來.一旦界面數據太多,信息量太大,往往造成資源過多消耗,界面卡頓,甚至會造成程序崩潰...這時,我們就需要使用到fragment的懶加載方式,即第一次看到的時候自動加載當前頁面,相鄰的fragment不再預加載.
Google官網提供給我們setUserVisibleHint這個方法。(API地址:http://androiddoc.qiniudn.com/reference/android/app/Fragment.html#setUserVisibleHint(boolean) ),這個方法的調用時期:當前fragment對用戶可見時調用.
那么,是否可以在setUserVisibleHint(boolean isVisibleToUser)里進行數據加載操作來實現懶加載呢?
可以是可以,如果你只是需要數據的懶加載的話,但如果你還有以下的需求,那么這種方式就不行了:
1、如果在Fragment可見時需要進行一些控件的操作,比如顯示加載控件
2、如果還需要在Fragment從 ""可見" 到 "不可見”時進行一些操作的話,比如取消加載控件顯示
經過調試,setUserVisibleHint()可能會在Fragment的生命周期之外被調用,也就是可能在view創建前就被調用,也可能在destroyView后被調用,所以如果涉及到一些控件的操作的話,可能會報 null 異常,因為控件還沒初始化,或者已經摧毀了。
基於這個基礎,我們需要達到具體的效果是:①預加載時只做輕量的初始化;
第一次可見狀態下才開始加載數;
③在把生命周期拆成 “可見”與“不可見”狀態
④不被繁瑣的生命周期拖延時間;
上代碼了:
這樣的話,一個Fragment懶加載的基類就寫完了,只需要讓自己的子Fragment繼承就好了.