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();
這使得這個問題很愚蠢。我希望任何人犯了同樣的錯誤可以利用這個愚蠢的回答:) – osrl