2014-04-03 65 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

相关问题