【问题标题】:How to navigate to last popped up fragment from next fragment?如何从下一个片段导航到最后弹出的片段?
【发布时间】:2017-07-27 07:21:26
【问题描述】:

我现在有 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();

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

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

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

@Override
public void onBackPressed() {

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


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

        }
    }
}

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

【问题讨论】:

    标签: java android android-fragments fragment-backstack


    【解决方案1】:

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

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

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

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

    另外,删除replace() 之前的所有popBackStack()。当您需要将片段保留在后堆栈中时,不需要此行。

    【讨论】:

    • 我还是要去主要片段,它是空白的。我试图添加片段而不是替换但没有工作。
    • 对不起。我忘了说你需要删除replace()之前的所有popBackStack()
    猜你喜欢
    • 2013-12-19
    • 1970-01-01
    • 2021-03-08
    • 2016-07-13
    • 1970-01-01
    • 2020-09-03
    • 1970-01-01
    • 2021-05-16
    • 2021-05-02
    相关资源
    最近更新 更多