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

时间:2011-06-23 15:37:31

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

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

我有一个片段类型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。
  5. 现在,我有这样的片段: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)
    4. 似乎片段彼此显示在一起。

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

2 个答案:

答案 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,然后移除顶部片段。