【问题标题】:BackStack is not working with nested FragmentsBackStack 不适用于嵌套片段
【发布时间】:2014-07-18 07:38:17
【问题描述】:

我正在使用 ViewPager 将三个页面显示为片段 FirstFragment、SecondFragment、ThirdFragment:

在 ViewPager 的第一页即 FirstFragment 中,单击按钮时我将移至 FragmentA,然后单击按钮时在 FragmentA 中移至 FragmentB,单击按钮时它们在 FragmentB 中,我将移至片段 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

但这在嵌套片段的情况下不起作用: FirstFragment(ViewPager First Page) 然后是 FragmentA,然后是 FragmentB,然后是 FragmentC

【问题讨论】:

  • 你在使用片段适配器吗?

标签: android android-fragments


【解决方案1】:

我通过以下方式解决了这个问题:

在 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();
}

【讨论】:

  • 我有视图寻呼机,我在框架布局上添加了两个片段。现在当回按它时会弹出第二个片段,但在那之后,当我回按它的崩溃时,因为 frag.isvisible()。我在片段内有带有视图寻呼机的标签
猜你喜欢
  • 1970-01-01
  • 2015-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-30
  • 2014-09-26
  • 1970-01-01
相关资源
最近更新 更多