这是一个关于理解Fragments中函数replace()的行为的问题,我认为这不直观。
1)我在XML中有一个空的FrameLayout,其id = R.id.content_fragment。
2)通过代码,我像往常一样将一个片段添加到FrameLayout(我想保留backstack,以便用户可以返回旧的添加片段)
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 !!怎么会这样? “replace”+“addToBackStack”是否只是一个简单的“添加”?为什么呢?
由于
编辑:
示例:
添加frag1
添加frag2
添加frag3 - >我有一个3片段的背书
替换frag4 - >我应该有一个1个片段的后台,因为我正在替换整个 Frame4的内容与frag4
添加frag5 - >我希望在靠背堆上有两个碎片(frag4& frag5)
替换frag6 - >我希望再次回到1(frag6)