2014-04-03 99 views
0

這裏是場景:我在主要佈局中有主要的FragmentActivity和I replace()片段。我的一個片段(假設FragmentA是父片段)有一個子片段(FragmentB是列表片段)。然後在列表項中單擊我將FragmentB替換爲另一個子片段FragmentC(Detail Fragment),並將片段B添加到addToBackStack()。我用後面的按鈕點擊Main FragmentActivity用以下代碼:爲什麼我不能將片段添加到後臺堆棧

@Override 
public void onBackPressed() { 
    // mCurrentFragment is FragmentA, parent fragment 
    // If the fragment exists and has some back-stack entry 
    if (mCurrentFragment != null && mCurrentFragment.getChildFragmentManager().getBackStackEntryCount() > 0){ 
     // Get the fragment fragment manager - and pop the back stack 
     mCurrentFragment.getChildFragmentManager().popBackStack(); 
    } 
    // Else, nothing in the direct fragment back stack 
    else{ 
     // Let super handle the back press 
     super.onBackPressed(); 
    } 
} 

這個效果很好。

但是當我嘗試用FragmentC替換「父」FragmentA時,當我按下返回按鈕super.onBackPressed()行時,我得到'NullPointerException'。這是因爲背堆棧入口計數小於0.

這是我替換父代的代碼。

//This is on FragmentB(list fragment) 
FragmentManager fragmentManager = getParentFragment().getFragmentManager(); 
fragmentManager.beginTransaction().replace(R.id.main_content_frame, fragment).addToBackStack(null).commit(); 

回答

0

onBackPressed()代碼是從this答案。由於我沒有使用childFragmentManager,所以不需要。刪除該代碼運行良好。

+0

這使得這個問題很愚蠢。我希望任何人犯了同樣的錯誤可以利用這個愚蠢的回答:) – osrl

相關問題