2016-12-14 47 views
0

我需要知道ViewPager中片段的生命週期? 我有3個選項卡ViewPager(3片段) 他們之間滑動時的生命週期是什麼?如何刷新ViewPager碎片中的數據?

我注意到,當我從片段3到片段1時,它正在刷新。那麼在這個時刻哪個方法在生命週期中被稱爲?

我試圖在每種方法中都放上吐司,但是我發現它們是互相調用的,所以我不知道哪一個是負責刷新的。

我想這是onActivityCreated(),但要調用它,我必須通過Bundle saveInstancestate。當我通過null它崩潰,那麼如何獲得這個對象?

如果還有其他更好的方法,請分享。 目標是當我點擊操作欄上的按鈕時刷新片段中的數據。

謝謝

+0

Pager適配器的'getItem'方法是否創建片段的新實例? –

+0

它什麼都不做 – kerollos

+0

你什麼意思不做什麼?它必須返回一個視圖或片段(可能是您的案例中的片段)。 –

回答

1

視圖尋呼機片段始終加載其鄰居在任何一方。

正因爲如此,您將看到碎片在可見之前運行的創建回調。離開一個碎片2頁後,它將被銷燬。

讓您的活動執行ViewPager.OnPageChangeListener然後使用onPageSelected將呼叫轉入您的片段。您可以在該活動中保留對視圖頁片段的引用。

public class ViewPagerActivity implements ViewPager.OnPageChangeListener { 

    public void onCreate(Bundle savedInstanceState) { 
     ... 
     if (savedInstanceState != null) { 
      //Restore the fragment's instance 
      mContent = getSupportFragmentManager().getFragment(savedInstanceState, "mContent"); 
      ... 
     } 
     ... 
    } 

    @Override 
    protected void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 

     //Save the fragment's instance 
     getSupportFragmentManager().putFragment(outState, "mContent", mContent); 
    } 


    // regular activity stuff plus view pager methods 

    @Override 
    public void onPageSelected(int arg0) { 
     final ReadyFragment fragment = mAdapter.getItem(arg0); 
     if (fragment.isVisible()) { 
      fragment.ready(); //method inside your custom fragment code 
     } 
    } 
} 

添加一個接口類:

public interface ReadyInterface { 
    public void ready(); 
} 

實現該接口在您的片段:

public class ReadyFragment extends Fragment implements ReadyInterface { 

    //.. your regular fragment stuff 

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    ... 
    if (savedInstanceState != null) { 
     //Restore the fragment's state here 
    } 
} 
... 
@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 

    //Save the fragment's state here 
    } 

    @Overide 
    public void ready() { 
    // do your stuff here that needs to happen 
    //once fragment is displayed and running 
    } 

} 
+0

對不起,我不明白你的觀點。 – kerollos

+0

答案解釋了片段運行和顯示時如何確切知道。查看尋呼機不斷破壞並創建碎片。 –

+0

我添加了保存和恢復片段狀態的東西 –

0

在您的活動,您可以設置視圖尋呼機適配器後,把你的代碼無論onPageSelected()方法。每次更改或刷新viewPager時都會調用它。

viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
      @Override 
      public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 

      } 

      @Override 
      public void onPageSelected(int position) { 

      } 

      @Override 
      public void onPageScrollStateChanged(int state) { 

      } 
     });