我正在使用 ViewPager 将三个页面显示为 fragment FirstFragment、SecondFragment、ThirdFragment:
在 ViewPager 的第一页中,即 FirstFragment,点击一个按钮我移动到 FragmentA,然后在 FragmentA 中点击一个按钮我移动到 FragmentB,它们在 FragmentB 中点击一个按钮,我移动到 fragment 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 First Page) 然后是 FragmentA
但这在嵌套 fragment 的情况下不起作用: FirstFragment(ViewPager First Page) 然后是FragmentA,然后是FragmentB,然后是FragmentC
最佳答案
我通过以下方式解决了这个问题:
在 ViewPager FirstFragment 中,为了添加第一个嵌套 fragment 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();
}
关于android - BackStack 不适用于嵌套 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24819652/