我使用ViewPager将三个页面显示为片段FirstFragment,SecondFragment,ThirdFragment:
在ViewPager的第一页是FirstFragment,在按钮上点击我移动到FragmentA,然后在FragmentA中点击按钮,我移动到FragmentB,它们在FragmentB中点击按钮,I& #39;移动到片段C. 现在,当我按回键时,我想按顺序进行: FragmentC,然后是FragmentB,然后是FragmentA,然后是FirstFragment(ViewPager第一页)
但是当我在FragmentC上按回键时,我就退出了应用程序:
然后我使用了以下解决方案
@Override
public void onBackPressed() {
// if there is a fragment and the back stack of this fragment is not empty,
// then emulate 'onBackPressed' behaviour, because in default, it is not working
FragmentManager fm = getSupportFragmentManager();
for (Fragment frag : fm.getFragments()) {
if (frag.isVisible()) {
FragmentManager childFm = frag.getChildFragmentManager();
if (childFm.getBackStackEntryCount() > 0) {
childFm.popBackStack();
return;
}
}
}
super.onBackPressed();
}
上述解决方案仅在我有效时才有效 FirstFragment(ViewPager第一页)然后是FragmentA
但是在嵌套片段的情况下这不起作用: FirstFragment(ViewPager First Page)然后是FragmentA,然后是FragmentB,然后是FragmentC
答案 0 :(得分:8)
我通过以下方式解决了这个问题:
在ViewPager FirstFragment中,为了添加第一个嵌套片段FragmentA,我使用了getChildFragmentManager。
但是在FragmentA中单击一下按钮,添加FragmentB,然后在FragmentB中点击一下按钮添加FragmentC,我使用了getSupportFragmentManager。
也按照onBackPressed方法使用:
@Override
public void onBackPressed() {
FragmentManager fm = getSupportFragmentManager();
for (Fragment frag : fm.getFragments()) {
if (frag.isVisible()) {
FragmentManager childFm = frag.getChildFragmentManager();
if (childFm.getBackStackEntryCount() > 0) {
for (Fragment childfragnested: childFm.getFragments()) {
FragmentManager childFmNestManager = childfragnested.getFragmentManager();
if(childfragnested.isVisible()) {
childFmNestManager.popBackStack();
return;
}
}
}
}
}
super.onBackPressed();
}