Android應用開發中,常常會用到ViewPager + Fragment,雖然效果不錯,但隨之而來的還有一些問題,下面就說說其中的初始化問題。ide
ViewPager初始化時會預加載先後的2個頁面,即便設置了setOffscreenPageLimit(0); 它至少也會預加載一個頁面測試
但在實際場景中,可能咱們不須要這個預加載的功能,這時咱們就須要對其進行一些控制。開發
我使用的方法是setUserVisibleHint(boolean isVisibleToUser)get
每次ViewPager預加載頁面的時候,被預加載的Fragment都會調用這個方法,因此我就經過這個方法來控制Fragment裏面的數據初始化it
使用前提是Fragment頁面的數量不是不少,設置setOffscreenPageLimit(全部Fragment的數量);方法
緣由是若是不所有預加載,那麼當滑動頁面超出預加載範圍以後,就會有頁面被銷燬,那麼這個控制方法就失效了,固然,若是沒有特殊的需求im
不設置這個方法也不會有問題,主要看本身的需求。數據
具體方法以下:vi
public boolean canExcute = true;//爲了onActivityCreated中setUserVisibleHint方法只執行一次return
public boolean isFirstExcute = true;//標記頁面是不是第一次加載,爲了初始化只執行一次
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if (canExcute) {//頁面第一次加載時執行,之後不在執行
canExcute = false;
setUserVisibleHint(getUserVisibleHint());
}
}
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (canExcute) {//onActivityCreated方法執行以前,不讓此方法執行
return;
}
if (isVisibleToUser && isFirstExcute) {// 頁面可見而且是第一次加載
isFirstExcute= false;//標記頁面已經加載過一次,之後不須要在執行
initData();//把你只須要初始化一次的數據寫在這個方法裏面
}
if (getUserVisibleHint()) {// 頁面每次對用戶可見時執行
} else {
}
}
以上方法不必定對全部場景都適用,你們使用時仍是須要通過測試並改進。