2013-03-14 68 views
1

我的應用程序的目標是API 8及更高版本,並使用ActionbarSherlock。 Activity延伸SherlockFragmentActivity。我對viewpager片段適配器如下:getFragmentManager()返回null

public class MyFragmentAdapter extends FragmentPagerAdapter { 

    public Fragment getItem(int position) { 
     ... 
    } 

    @Override 
    public void destroyItem(ViewGroup container, int position, Object object) { 
     super.destroyItem(container, position, object); 

     FragmentManager manager = ((ListFragment) object).getSherlockActivity().getSupportFragmentManager(); 
     FragmentTransaction trans = manager.beginTransaction(); 
     trans.remove((Fragment) object); 
     trans.commit(); 
    } 
} 

destroyItem用於去除FragmentPagerAdapter的頁面。這是第一次正常工作,也許前兩次頁面被刪除。但在持續頁面刪除的某個時間點,manager返回null,應用程序在manager.beginTransaction()行上崩潰。

我似乎無法弄清楚這是爲什麼...

+1

這可能是由於super.destroyItem(....);在你的經理打電話之前被呼叫。 ((ListFragment)(object))可能有一些屬性在調用之前被銷燬。基本上是競爭條件,這將解釋間歇性。嘗試將代碼後的呼叫移至super.destroy ...。 – 2013-03-14 17:09:54

+0

同樣在未來,請在崩潰問題時添加堆棧跟蹤。 – Warpzit 2013-03-14 17:12:50

回答

1

我想通了這個問題。原來ListFragment傳遞到destroyItem有其FragmentManager == null,因爲我沒有正確刪除清單中的無效WeakReference項目。

0

最後,幾天前我可以找到我的錯誤。

解決方法很簡單:

只需創建一個新的捆綁變量作爲全局變量

Bundle datosGuardados; 

存儲savedInstanceState

的數據
datosGuardados = savedInstanceState; 

最後只是檢查它是否null之前使用任何getFragmentManager

if (datosGuardados != null) infoF = (InformacionFragment) getFragmentManager().findFragmentById(R.id.posicionamiento_layout);