Android - ViewPager+Fragment初始化問題

來源:互聯網
上載者:User

標籤:

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

 

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

Android - ViewPager+Fragment初始化問題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.