如何从下一个片段导航到最后弹出的片段?

时间:2017-07-27 07:21:27

标签: java android android-fragments fragment-backstack

我现在有3个片段。一个是主要片段,第二个是配置文件片段,第三个是配置文件编辑片段。

MainFragment的调用方式如下:

        fragmentManager = getSupportFragmentManager();
    DashboardFragment fragment1 = new DashboardFragment();
    Bundle bundle = new Bundle();
    fragment1.setArguments(bundle);
    fragmentManager.popBackStack(null,FragmentManager.POP_BACK_STACK_INCLUSIVE);
    fragmentManager.beginTransaction().replace(R.id.frame, fragment1, "DASHBOARD_FRAGMENT").commitAllowingStateLoss();

现在从主片段我导航到这样的配置文件片段。

                fragmentManager = ((MainActivity)(mContext)).getSupportFragmentManager();
                ProfileFragment fragment1 = new ProfileFragment();
                Bundle bundle = new Bundle();
                fragment1.setArguments(bundle);
                fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
                fragmentManager.beginTransaction().replace(R.id.frame, fragment1, "PROFILE_FRAGMENT").addToBackStack("B").commit();

现在从配置文件片段我导航到配置文件编辑片段,如下所示:

  fragmentManager = getActivity().getSupportFragmentManager();
            ProfileEditFragment fragment1 = new ProfileEditFragment();
            Bundle bundle = new Bundle();
            fragment1.setArguments(bundle);
            fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
            fragmentManager.beginTransaction().add(R.id.frame, fragment1, "PROFILE_EDIT_FRAGMENT").addToBackStack("C").commit();

现在导航就像从主片段到配置文件片段,从配置文件片段到配置文件编辑片段。

现在当我从配置文件编辑片段按回来时,它直接转到显示空白的主片段。我想从配置文件编辑片段按下背面的配置文件片段,然后在配置文件片段的背面按下返回主片段。 / p>

为此,我在主要活动中使用了onBackPressed方法,但效果不佳。

@Override
public void onBackPressed() {

    // Do nothing if the back button is disabled.
    if (!mBackPressCancelled) {


        if (getFragmentManager().getBackStackEntryCount() > 0) {
            getFragmentManager().popBackStackImmediate();
        }
        else {
            super.onBackPressed();

        }
    }
}
出了什么问题?请帮忙。谢谢..

1 个答案:

答案 0 :(得分:2)

您还必须将DashboardFragment添加到后台堆栈。

fragmentManager.beginTransaction().replace(R.id.frame, fragment1, "DASHBOARD_FRAGMENT").addToBackStack("A").commitAllowingStateLoss();

另外,更改onBackPressed()中的if条件。因此,它会在后面的堆栈中保留至少一个片段。

if (getFragmentManager().getBackStackEntryCount() > 1) {
        getFragmentManager().popBackStackImmediate();
} else {
    super.onBackPressed();
}

此外,请移除popBackStack()之前的所有replace()。当你需要在后面的堆栈中保留片段时,不需要这一行。