backStack 中的片段

Fragments in backStack

我的 ViewPager 有 3 个选项卡。 Tab(3) 包括 2 个片段 (A) --> (B).

Tab(1)
Tab(2)
Tab(3) --> (B) --> (C)

我在Tab(3)中替换片段的方式:

FragmentTransaction trans = getActivity().getSupportFragmentManager().beginTransaction();
            trans.replace(R.id.B_container, new FragmentC().newInstance(), "C");
            trans.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
            trans.addToBackStack("B->C");
            trans.commit();

当我在 (B) 中并按下按钮时,它会直接将我带到 Tab(3),跳过 (A)。 这是 (B) 中按钮的代码:

FragmentManager fm = getActivity().getSupportFragmentManager();
            for(int i = 0; i < fm.getBackStackEntryCount(); ++i) {
                fm.popBackStack();
            }

一切正常。 问题是当我在 (B) 时,然后我转到 Tab(1) 或 Tab(2) 并在它不起作用后按下按钮。 请让我知道我做错了什么。 谢谢。

//==================================== ================================

我尝试用 getChildFragmentMaganer() 替换 etActivity().getSupportFragmentManager()。 由于 popBackStack() 的常规方式不再有效,我不得不修改它。 现在可以用了,我也遇到了同样的问题。

FragmentManager fm = getActivity().getSupportFragmentManager();
            for (Fragment frag : fm.getFragments()) {
                    FragmentManager childFm = frag.getChildFragmentManager();
                    if (childFm.getBackStackEntryCount() > 0) {
                        childFm.popBackStack();
                    }
                }
            }

尝试使用 getChildFragmentManager() 获取片段管理器。根据我的经验,当我在一个片段中并尝试在其中放置另一个片段时,我使用 getChildFragmentManager。