嵌套片段和后栈

Mik*_*keS 18 android android-fragments android-nested-fragment

Back Stack是否支持与Android中嵌套片段的交互?

如果是的话,我做错了什么?在我的实现中,后退按钮完全忽略了我将此事务添加到后台堆栈的事实.我希望它不是因为嵌套片段的问题,而是我做错了什么.

以下代码位于我的一个片段中,用于将新片段与当前显示的任何嵌套片段交换:

     MyFragment fragment = new MyFragment();
     FragmentTransaction ft = getChildFragmentManager().beginTransaction();
     ft.setCustomAnimations(R.animator.slide_in_from_right, R.animator.slide_out_left, R.animator.slide_in_from_left, R.animator.slide_out_right);
     ft.addToBackStack(null);
     ft.replace(R.id.myFragmentHolder, fragment);
     ft.commit();
Run Code Online (Sandbox Code Playgroud)

la_*_*rre 30

我有同样的问题,我想嵌套片段,并为每个嵌套片段保留一个后栈.

但是......似乎这个案例不是由v4支持库处理的.在库中的FragmentActivity代码中,我可以找到:

public void onBackPressed() {
    if (!mFragments.popBackStackImmediate()) {
        finish();
    }
}
Run Code Online (Sandbox Code Playgroud)

mFragments代表活动的FragmentManager,但似乎这个管理器不会将pop"传播"给子管理器.解决方法是手动调用子管理器上的popBackStackImmediate(),就像从FragmentActivity继承的活动中一样:

private Fragment myFragmentContainer;

    @Override
    public void onBackPressed() {
            if (!myFragmentContainer.getChildFragmentManager().popBackStackImmediate()) {
                finish(); //or call the popBackStack on the container if necessary
            }
    }
Run Code Online (Sandbox Code Playgroud)

可能有更好的方式和更自动化的方式,但对于我的需求,它是好的.