Android替换片段与现有版本

时间:2016-01-06 05:58:31

标签: java android android-fragments fragment

有人可以解释为什么这段代码不起作用吗?

    Fragment f = fragmentManager.findFragmentByTag(tag);

    if (f == null) {
        fragmentManager.beginTransaction().replace(R.id.protokoll_content, fragment, tag).commit();
    } else {
        fragmentManager.beginTransaction().replace(R.id.protokoll_content, f).commit();
    }

我认为你不需要做更多我想要做的事情,我认为其余的代码与问题无关。我99%肯定这是麻烦区。

我只是试图通过其标签调用来加载现有版本的片段。

在我看来,上面的代码将执行如下:

IF(片段没有现有实例){创建一个带有唯一标记的新片段并用它替换容器中的现有片段}

OTHERWISE(片段DOES有一个现有实例){加载现有版本而不是创建一个新版本并用找到的现有片段替换当前片段}

修改

略有更新的代码。同样的问题,新片段而不是片段的现有实例被加载。

澄清

每次都会创建新片段而不是现有片段。如果我写了一些内容,请转到一个新的片段,然后尝试返回旧片段,所有文本都被删除,因为新的片段被制作而不是旧的片段被加载。

1 个答案:

答案 0 :(得分:0)

如果没有片段添加到布局

,下面的代码用于添加片段
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
Fragment1 fragment1 = new Fragment1();
fragmentTransaction.add(R.id.fragment, fragment1, "fragment1");
fragmentTransaction.commit();
  

上面的代码会将Fragment1添加到R.id.fragment

以下代码用于在布局中将片段替换为另一个片段

FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
Fragment2 fragment2 = new Fragment2();
fragmentTransaction.replace(R.id.fragment, fragment2, "fragment2");
fragmentTransaction.commit();
  

上面的代码会将一个片段替换为布局中的另一个片段