我在Android平板应用中使用了2个片段。一个位于屏幕左侧,另一个位于右侧。当您在右边的片段上单击按钮时,另一个片段将添加到右侧片段的顶部。此片段被添加到后退堆栈中。
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.add(R.id.fragmentlayout, fragment2);
ft.addToBackStack("Fragment2");
ft.commit();
返回栈现在是:
[片段1] -> [片段2]
左侧还有一个按钮,可以打开与Fragment 2相同的Fragment并将其添加到返回栈中。返回栈现在是:
[片段1] -> [片段2] -> [片段3]
在Fragment 2上有一个关闭该Fragment的按钮。
getFragmentManager().popBackStack("Fragment2", FragmentManager.POP_BACK_STACK_INCLUSIVE);
问题在于当我仅想关闭 [片段 2] 时,[片段 3] 也会被销毁。我可以通过调用下面的代码手动删除片段。
FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
ft.remove(fragment2).commit();
但是回退栈将会保留
[片段1] -> [(幽灵)片段2] -> [片段3]
因此,您需要再按一次返回按钮才能关闭应用程序。
有没有办法仅从回退栈中移除[片段2]并在屏幕上保留[片段3]?