Android - ViewPager+Fragment初始化問題


Android應用開發中,經常會用到ViewPager + Fragment,雖然效果不錯,但隨之而來的還有一些問題,下面就說說其中的初始化問題。

ViewPager初始化時會預加載前后的2個頁面,即使設置了setOffscreenPageLimit(0); 它至少也會預加載一個頁面

但在實際場景中,可能我們不需要這個預加載的功能,這時我們就需要對其進行一些控制。

我使用的方法是setUserVisibleHint(boolean isVisibleToUser)

每次ViewPager預加載頁面的時候,被預加載的Fragment都會調用這個方法,所以我就通過這個方法來控制Fragment里面的數據初始化

使用前提是Fragment頁面的數量不是很多,設置setOffscreenPageLimit(所有Fragment的數量);

原因是如果不全部預加載,那么當滑動頁面超出預加載范圍之后,就會有頁面被銷毀,那么這個控制方法就失效了,當然,如果沒有特殊的需求

不設置這個方法也不會有問題,主要看自己的需求。

具體方法如下:

public boolean canExcute = true;//為了onActivityCreated中setUserVisibleHint方法只執行一次

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

 

以上方法不一定對所有場景都適用,大家使用時還是需要經過測試並改進。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM