弹出片段的后退键显示重叠片段

FHa*_*Han 9 android fragment android-fragments android-3.0-honeycomb

我创建了一个示例应用来测试这个重叠的问题.

我有一个片段类型Fragment1,我创建了一个Fragment1的新实例,并在运行时将它添加到我的活动中的FrameLayout.我在几个按钮的帮助下添加片段.

注意:我已经为Fragment1的每个新实例提供了一个不同的数字(#1,#2,#3等),以便在UI上显示,以帮助我找出我正在查看的片段.

所以..这就是我做的:

  1. 单击Button 3,创建Fragment1的新实例并将其添加到Frame1.
  2. 单击Button 4,创建Fragment1的新实例并将其添加到Frame1并将其添加到片段backstack.
  3. 重复1和2.
  4. 重复1和2.

现在,我有这样的片段:1(#1),2(#2),1(#3),2(#4),1(#5),2(#6).

我在查看片段#6时按后退键.

  1. 返回按键,UI显示(#5).
  2. 返回按键,UI显示(#3 AND#5),
  3. 返回按键,UI显示(#1,#3,AND#5)

似乎片段在彼此的顶部显示.

为什么?有重叠的问题吗?如何清除这个重叠的问题.我认为这将是兼容性库的一个问题...但它也是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();
    } 
Run Code Online (Sandbox Code Playgroud)

PJL*_*PJL 1

如果您add一个接一个地执行两个调用(两个commit调用),那么片段将显示为重叠,一个有效地位于另一个之上。

\n\n

因此(对于新示例)如果说您在同一帧中用 frag2 替换 frag1,然后用 frag4 替换 frag3,并且没有后台事务,那么我预计 frag2 和 frag4 会被覆盖。

\n\n

此外,您的 链接中还存在一个潜在问题replace。您应该为每个单独打电话commit。请参阅Android \xe2\x80\x94 用新堆栈替换片段返回堆栈?

\n