这是一个关于理解 Fragments 中函数 replace() 的行为的问题,我认为这并不直观。
1) 我在一个 id = R.id.content_fragment 的 XML 中有一个空的 FrameLayout。
2)通过代码,我像往常一样向 FrameLayout 添加一个片段(我想保留后台堆栈,以便用户可以返回到旧添加的片段)
FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
ft.add(R.id.content_fragment, new MyFragment1(), "tag1");
ft.addToBackStack(null);
ft.commit();
3)现在我想用一个全新的片段替换我的 FrameLayout 的内容(注意我想替换,所以我希望旧片段从后台消失)
FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
ft.replace(R.id.content_fragment, new MyFragment2(), "tag2");
ft.addToBackStack(null);
ft.commit();
4) 现在返回时,会显示旧的 MyFragment1!怎么会这样?“替换”+“addToBackStack”是否作为简单的“添加”工作?为什么?
谢谢
编辑:
例子:
添加片段1
添加frag2
添加 frag3 --> 我有一个包含 3 个片段的 backstack
替换 frag4 --> 我应该有 1 个片段的 backstack,因为我正在用 frag4 替换 FrameLayout 的全部内容
添加 frag5 --> 我希望在后台有 2 个片段(frag4 和 frag5)
替换 frag6 --> 我希望 backstack 再次为 1 (frag6)