【问题标题】:Back key to pop the Fragment shows overlapping fragments返回键弹出片段显示重叠片段
【发布时间】:2011-06-23 15:37:30
【问题描述】:

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

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

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

所以..这就是我的工作:

  1. 单击按钮 3,创建 Fragment1 的新实例并将其添加到 Frame1。
  2. 单击按钮 4,创建 Fragment1 的新实例并将其添加到 Frame1 并将其添加到 Fragment 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 和 #5)

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

为什么?是否存在重叠问题?我怎样才能清除这个重叠的问题。我认为这将是兼容性库的一个问题......但它也在 3.0.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();
    } 

【问题讨论】:

    标签: android android-3.0-honeycomb android-fragments fragment


    【解决方案1】:

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

    因此(对于新示例)如果假设您在同一帧中将 frag1 替换为 frag2,然后将 frag3 替换为 frag4,并且没有回栈事务,那么我希望 frag2 和 frag4 被覆盖。

    此外,replace 的链接也存在潜在问题。您应该为每个单独的 commit 调用。见Android — Replace Fragment Back Stack With New Stack?

    【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-30
      • 1970-01-01
      相关资源
      最近更新 更多