0

我有一個有7頁的ViewPager,在導航時我保留了其中的4個,並在被另外4個設置替換後被銷燬,然後GC被銷燬。在ViewPager下銷燬的碎片會發生什麼?

gPager.get().setOffscreenPageLimit(4); 

裏面我的自定義FragmentStatePagerAdapter

@Override public Parcelable saveState() { return null; } 

我的問題是我得到空指針錯誤,即使我手動重新初始化片段中的觀點也被破壞,如「mDrawerLayout」和mDrawerList後。示例:

 View rootView = inflater.inflate(R.layout.drawer_layout_fragment, container, false); 
     mDrawerLayout = (DrawerLayout) rootView.get().findViewById(R.id.drawer_layout); 
     mDrawerList = (ListView) rootView.get().findViewById(R.id.left_drawer); 

如果其他碎片被破壞,並且某些碎片正在ViewPager的頁面上顯示在屏幕上。這些片段是否再次被重新創建或者只是被保留,即使它經歷了onDestory?如果Frag2被銷燬並且Frag1不是。 viewPager(位於主活動)將 再次調用setAdapter?或者它會自動跳過setAdapter並直接轉到MyCustomPagerAdapter來填充被破壞的碎片?

@Override

public Fragment getItem(int arg0) { 
    SavePref saveState = new SavePref(mContext.get()); 

    switch(arg0){ 
     /** Android tab is selected */ 
     case 0: 
      Frag f1 = new Frag1() 
      return f1; 

     case 1: 
      Frag f2 = new Frag2() 
      return f2; 
    } 
} 
+0

所有'setOffscreenPageLimit(4)的第一個'裝置4在任當前選定片段的一側將保存在內存中。因此,您可能會將8個片段保存在內存中,但不包括當前顯示的片段。其次讓'FragmentStatePagerAdapter'保存狀態,不要覆蓋'saveState()'。 –

+0

@ M-WaJeEh我正在使用覆蓋'saveState',因爲我沒有,也不會使用'onConfig Changes',因此當有'orientation change'不會觸發空指針時,我可以保留片段狀態。即使不改變方向,這是否會影響導航? – rahstame

+0

我不明白你的意思。此方法用於'FragmentStatePagerAdapter'。你不想讓'FragmentStatePagerAdapter'來保存你的片段的狀態嗎? –

回答

0

一旦視圖尋呼機破壞片段它將重新使用位置和陣列箱,使用而instantiateItem邏輯..

相關問題