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