android - BackStack 不适用于嵌套 fragment

标签 android android-fragments

我正在使用 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/

相关文章:

android - 好像是第一次还是从命令行编译Android项目?

android - 在 View 之间切换

java - 从 SQLite DB 填充的列表项的顺序不正确

javascript - Leaflet CRS.Simple on Chrome Android 分辨率低缩放

android - 将 transitionSet 应用于 Fragment 中的单个 View content transition 会产生重复的 View 效果

android - 如何使用数据绑定(bind)在 MVVM 中设置适配器

android - 如何在MainActivity中保存在不同事务中提交的两个 fragment 的InstanceState?

android - 事件总线 fragment 注销

android - 如何替换 fragment 中的 fragment ?

android - 使用 fragment 导致崩溃