android - 返回键弹出 fragment 显示重叠 fragment

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

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

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

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

所以..这是我所做的:

  1. 点击按钮 3,创建 Fragment1 的新实例并将其添加到 Frame1。
  2. 点击按钮 4,创建 Fragment1 的新实例并将其添加到 Frame1 并将其添加到 fragment 后退堆栈。
  3. 重复 1 和 2。
  4. 重复 1 和 2。

现在,我有以下顺序的 fragment :1(#1)、2(#2)、1(#3)、2(#4)、1(#5)、2(#6)。

我在查看 fragment #6 时按了返回键。

  1. 按下后退键,UI 显示 (#5)。
  2. 按下后退键,UI 显示(#3 和 #5),
  3. 按下后退键,UI 显示(#1、#3 和 #5)

似乎 fragment 显示在彼此之上。

为什么?是否存在重叠问题?我怎样才能清除这个重叠的问题。我认为这将是兼容性库的一个问题......但它也在 3.0 上。

添加 fragment 的代码:

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 调用),那么是的, fragment 将重叠显示,有效地一个在另一个之上。

因此(对于新示例)如果说您在同一帧中将 frag1 替换为 frag2,然后将 frag3 替换为 frag4,那么我希望 frag2 和 frag4 被覆盖。

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

关于android - 返回键弹出 fragment 显示重叠 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6456759/

相关文章:

android - 如何最好地将消息从一个 Fragment 传递到其父级(相当于 onActivityResult)

java - 无法在android中使用imageView调用fragment

android - 处理网络断开的最佳方式

java - 扩展 Activity

android - Dagger2 如何@Provide 一种具有两种不同实现的类型

android - NewFromFD 在 nativeDecodeFileDescriptor 中失败 - Android 4.4

android - 无意在蜂窝上查看 jpg?

android - 跨 Activity 的 fragment 之间的共享元素转换不一致

android - 按钮自行松开(可能是特定于设备的)