我读了这个FragmenManager replace makes overlay,说明问题的解决方案是由于在xml中静态定义了片段。我有同样的问题,但我没有静态定义我的片段,我使用framelayout和片段管理器使用支持片段事务弹出我的DYNAMICALLY创建的片段。这是我的情景:
活动1有一个framelayout,名为" content"在它的xml中。
创建片段X并替换framelayout" content"。
单击片段X中的listview项时,将片段Y添加到backstack。显示片段X的" content"被片段Y替换。
单击片段Y中的按钮时,片段Z将添加到backstack。显示片段Y的" content"被片段Z替换。
点击片段Z中的按钮弹出后台并替换"内容"使用片段Y的新实例。
这些步骤按预期工作,除非在我按回到片段X后,单击列表视图项,然后再次执行步骤3。而不是片段Z像之前一样替换片段Y,它覆盖它。为什么会发生这种情况,我该如何解决?感谢
第2步的代码:
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.addToBackStack("y_screen");
ft = ft.replace(R.id.content_frame, FragmentY.newInstance(qTitle, qDetails, qObjectID));
ft.commit();
第3步的代码:
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.addToBackStack("z_screen");
ft.replace(R.id.content_frame, FragmentZ.newInstance(questionTitle, questionDetails,
qObjectID));
ft.commit();
第4步的代码:
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
fm.popBackStack();
ft.replace(R.id.content_frame, FragmentY.newInstance(questionTitle, questionDetails,
qid));
ft.commit();