天天看點

ViewPager+Fragment取消預加載(延遲加載)

在項目中,都或多或少地使用的tab布局,是以大都會用到viewpager+fragment,但是fragment有個不好或者太好的地方。

例如你在viewpager中添加了三個fragment,當加載viewpager中第一個fragment時,它會預設幫你預先加載了第二個fragment,當你加載第二個fragment時,它會幫你加載第三個fragment。

這樣雖然有時很好,但是使用者隻需看一個fragment時,我們就做了一些多餘工作加載了第二個fragment。在這隻需要取消fragment的預加載即可,隻有當使用者切換到某個fragment才加載

ViewPager+Fragment取消預加載(延遲加載)

首先,介紹兩個方法void setuservisiblehint(boolean isvisibletouser)、boolean getuservisiblehint(),它們分别用作設定/獲得fragment可見狀态,我們可以重寫fragment在其中做判斷,代碼如下:

在我們的fragment中,隻需要繼承這個類,然後重寫其中的lazyload()方法,當fragment對使用者可見(即使用者切換到此fragment時)我們在lazyload()中加載所需資料,詳細代碼看下面,我寫了個假的擷取資料線程:

到這裡我們隻是寫好了fragment,在fragmentactivity中還需要對viewpager設定一下,讓它每次隻加載一個fragment,viewpager.setoffscreenpagelimit(int limit),其中參數可以設為0或者1,參數小于1時,會預設用1來作為參數,未設定之前,viewpager會預設加載兩個fragment。是以,我們隻需要調用下它,設定下加載fragment個數即可:

繼續閱讀