Android - ViewPager+Fragment初始化問題

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 {
      
  }
 }

 

以上方法不必定對全部場景都適用,你們使用時仍是須要通過測試並改進。

相關文章
相關標籤/搜索