1.在使用ViewPager嵌套Fragment的時候,由於VIewPager的幾個Adapter的設置來說,都會有一定的預加載。通過設置setOffscreenPageLimit(int number) 來設置預加載的熟練,在V4包中,默認的預加載是1,即使你設置為0,也是不起作用的,設置的只能是大於1才會有效果的。我們需要通過更改V4包中的默認屬性才可以。
更改過的V4 包下載地址:
http://pan.baidu.com/s/1xtzEA
2.限制預加載,會出現滑動過程中卡頓現象。其實Fragment中防止預加載主要是防止數據的預加載,Fragment中的VIew預加載是有好處的,我們可以通過Fragment中的一個方法來達到預加載View 但是不加載數據,在Fragment顯示的時候才去加載數據。
直接上我項目中使用到的代碼:
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
//判斷Fragment中的ListView時候存在,判斷該Fragment時候已經正在前台顯示 通過這兩個判斷,就可以知道什么時候去加載數據了
if (isVisibleToUser && isVisible() && mPullToRefreshGridView.getVisibility() != View.VISIBLE) {
initData(); //加載數據的方法
}
super.setUserVisibleHint(isVisibleToUser);
}
這個方法會在切換到Fragment顯示的時候去調用。
為了保證一開始加載Fragment的時候該方法提前調用,導致的數據不會加載,我在代碼中做出了如下的判斷:
@Override
public void onActivityCreated(Bundle savedInstanceState) {
if (getUserVisibleHint() && mPullToRefreshGridView.getVisibility() != View.VISIBLE) {
initData();
}
super.onActivityCreated(savedInstanceState);
}
特別注意:
1.在剛開始加載Fragment的時候,setUserVisibleHint這個方法比onCreated方法執行的還要早。預加載的Fragment就不會執行這個方法。
2.在VIewPager 切換到某個Fragment的時候,還會調用該方法。
通過在這個方法中去加載數據,我發現可以一定程度的實現預加載問題,保證了預加載不會加載數據,只會加載Fragment中的VIew,這樣就可以保證了VIewPager滑動的流暢性,也保證了只有切換到一個Fragment的時候才去加載數據的目的。
我覺得這種方法比修改V4包中的預加載數量好的多啊。
