Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从下一个片段导航到最后一个弹出的片段?_Java_Android_Android Fragments_Fragment Backstack - Fatal编程技术网

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

Java 如何从下一个片段导航到最后一个弹出的片段?,java,android,android-fragments,fragment-backstack,Java,Android,Android Fragments,Fragment Backstack,我现在有3个碎片。一个是主片段,第二个是概要文件片段,第三个是概要文件编辑片段 MainFragment的名称如下: fragmentManager = getSupportFragmentManager(); DashboardFragment fragment1 = new DashboardFragment(); Bundle bundle = new Bundle(); fragment1.setArguments(bundle); fra

我现在有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 = 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();
现在,从主片段开始,我将导航到这样的概要片段

                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 = 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 = 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();
现在导航就像从主片段到概要文件片段,以及从概要文件片段到概要文件编辑片段

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

为此,我在主要活动中使用了OnBackpress方法,但效果不好

@Override
public void onBackPressed() {

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


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

        }
    }
}

出什么事了?请帮忙。谢谢。

您还必须将仪表板片段添加到后堆栈中

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()
。当您需要将片段保留在后堆栈中时,不需要此行。

您还必须将仪表板片段添加到后堆栈中

fragmentManager.beginTransaction().replace(R.id.frame, fragment1, "DASHBOARD_FRAGMENT").addToBackStack("A").commitAllowingStateLoss();
if (getFragmentManager().getBackStackEntryCount() > 1) {
        getFragmentManager().popBackStackImmediate();
} else {
    super.onBackPressed();
}
另外,在
onBackPressed()
中更改if条件。因此,它将在后堆栈中保留至少一个片段

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

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

我仍然要转到主片段,它是空的。我试图添加片段而不是替换,但不起作用。抱歉。我忘了说,在
replace()
之前,您需要删除所有
popBackStack()
,但我还是要转到主片段,它是空的。我试图添加片段而不是替换,但不起作用。抱歉。我忘了说您需要在
replace()之前删除所有
popBackStack()
if (getFragmentManager().getBackStackEntryCount() > 1) {
        getFragmentManager().popBackStackImmediate();
} else {
    super.onBackPressed();
}