Android 按Back键弹出片段显示重叠片段

Android 按Back键弹出片段显示重叠片段,android,android-3.0-honeycomb,android-fragments,fragment,Android,Android 3.0 Honeycomb,Android Fragments,Fragment,我创建了一个示例应用程序来测试这个重叠问题 我有一个片段类型Fragment1,我创建了Fragment1的一个新实例,并在运行时将其添加到活动中的FrameLayout中。我通过几个按钮添加片段 注意:我为Fragment1的每个新实例指定了一个不同的数字(#1、#2、#3等)以显示在UI上,以帮助我确定正在查看的片段 所以。。以下是我的工作: 单击按钮3,创建Fragment1的新实例并将其添加到Frame1 单击按钮4,创建Fragment1的新实例,并将其添加到Frame1,然后将其添加

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

我有一个片段类型Fragment1,我创建了Fragment1的一个新实例,并在运行时将其添加到活动中的FrameLayout中。我通过几个按钮添加片段

注意:我为Fragment1的每个新实例指定了一个不同的数字(#1、#2、#3等)以显示在UI上,以帮助我确定正在查看的片段

所以。。以下是我的工作:

  • 单击按钮3,创建Fragment1的新实例并将其添加到Frame1
  • 单击按钮4,创建Fragment1的新实例,并将其添加到Frame1,然后将其添加到FragmentBackback
  • 重复1和2
  • 重复1和2
  • 现在,我有以下顺序的片段:1(#1)、2(#2)、1(#3)、2(#4)、1(#5)、2(#6)

    我在查看片段#6时按back键

  • 按Back键,UI显示(#5)
  • 按后退键,UI显示(#3和#5)
  • 按后退键,UI显示(#1、#3和#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();
        } 
    

    如果您一个接一个地执行两个
    add
    调用(两个
    commit
    调用),那么是的,片段将显示为重叠,一个在另一个之上

    所以(举个新的例子)如果在同一帧中用frag2替换frag1,然后用frag4替换frag3,并且没有backbackback事务,那么我希望frag2和frag4被覆盖


    此外,您的
    replace
    链接中还有一个潜在问题。您应该为每个调用一个单独的
    commit
    。请参阅。

    只需覆盖
    onBackPress()
    onKeyUp
    并删除顶部片段。

    正如我所见,每个提交没有两个add调用。除此之外,我还面临着同样的重叠行为。