2015-11-15 140 views
1

在我的應用程序中,我有一個View pager,它可以旋轉4個片段。其中一些片段內部還有其他片段。第一次Viewpager啓動一個Fragment時它可以正常工作,但如果我旋轉並返回到前一個片段,則內部片段無法顯示(並且我注意到它們中的getActivity()返回null)。Android - ViewPager中片段內的片段問題

例如,應用程序啓動,我通過viewpager移動並查看所有主要片段,並且它們顯示正常,然後向後滾動,每個具有內部片段的主要片段都不能正確顯示。

我對我的ViewPager使用「FragmentStatePagerAdapter」,代碼如下(變量名稱是例如)。

私有類ContentPagerAdapter擴展FragmentStatePagerAdapter {

public ContentPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

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

    @Override 
    public Fragment getItem(int pos) { 

     Fragment fragment = null; 
     try { 
      if (pos == POS1) { 
       if (fragment1 == null) { 
        fragment1 = Fragment1.newInstance(); 
       } 
       fragment = fragment1; 
      } else if (pos == POS2) { 
       if (fragment2 == null) { 
        fragment2 = Fragment2.newInstance(something); 
       } 
       fragment = fragment2; 
      } else if (pos == POS3) { 
       if (fragment3 == null) { 
        fragment3 = Fragment3.newInstance(something3); 
       } 
       fragment = fragment3; 
      } else { //default 
       if (fragment4 == null) { 
        fragment4 = Fragment4.newInstance(something4); 
       } 
       fragment = fragment4; 
      } 
     }catch (Exception e) { 
      Log.e(AppConstants.APP_TAG, "Cannot create fragment", e); 
      finish(); 
     } 

     return fragment; 
    } 

    @Override 
    public int getCount() { 
     int count = 4; 
     return count; 
    } 

    @Override 
    public int getItemPosition(Object object) { 
     return POSITION_NONE; 
    } 
} 
+0

我認爲這可能與'FragmentStatePagerAdapter'處理未使用片段的方式有關。它銷燬片段並將其從「FragmentManager」中移除。嘗試使用'FragmentPagerAdapter'來代替它,看看它是如何發展的。 – jammaster

+1

我還發現,如果你真的想保持資源友好的'FragmentStatePagerAdapter',它似乎可以幫助你。 http://stackoverflow.com/questions/16960676/viewpager-in-tabfragment-not-loading-second-time – jammaster

+0

我試過FragmentPagerAdapter,它似乎有幫助,但只有一點。只是一對夫婦的片段工作,一些沒有和幾輪後,即使這些消失 – Panos

回答