我创建了一个示例应用来测试这个重叠的问题。
我有一个片段类型Fragment1,我创建了一个Fragment1的新实例,并在运行时将它添加到我的活动中的FrameLayout。我在几个按钮的帮助下添加片段。
注意:我已经为Fragment1的每个新实例提供了一个不同的数字(#1,#2,#3等),以便在UI上显示,以帮助我找出我正在查看的片段。
所以..这就是我所做的:
现在,我有这样的片段:1(#1),2(#2),1(#3),2(#4),1(#5),2(#6)。
我在查看片段#6时按后退键。
似乎片段彼此显示在一起。
为什么?有重叠的问题吗?如何清除这个重叠的问题。我认为这将是兼容性库的一个问题...但它也是3.0。
添加片段的代码:
public int doFragmentChange(int cont1, Fragment frag1, String tag1, int cont2, Fragment frag2, String tag2,
boolean addToStack, String stackTag) {
FragmentManager fm = getFragmentManager();// getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
if (frag1 != null) {
ft.replace(cont1, frag1, tag1);
}
if (frag2 != null) {
ft.replace(cont2, frag2, tag2);
}
// add fragment to stack
if (addToStack)
ft.addToBackStack(stackTag);
return ft.commit();
}
答案 0 :(得分:1)
如果您一个接一个地执行两个add
个调用(两个commit
个调用),那么片段将显示为重叠,一个在另一个之上有效。
所以(对于新的例子)如果说你用frag2替换frag1然后在没有backstack事务的同一帧中用frag4替换frag3那么我会期望frag2和frag4被重叠。
在replace
的链接中,还存在一个潜在的问题。你应该为每个人单独调用commit
。请参阅Android — Replace Fragment Back Stack With New Stack?。
答案 1 :(得分:1)
只需覆盖onBackPress()
或onKeyUp
,然后移除顶部片段。