安卓系统将碎片替换为现有版本



有人能解释一下为什么这个代码不起作用吗?

    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(片段没有现有实例){创建一个具有唯一标签的新片段,并用它替换容器中的现有片段}

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

编辑

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

澄清

每次都会制作新的碎片,而不是加载现有的碎片。如果我写了一些东西,转到一个新的片段,然后试着回到旧的片段,所有的文本都会被擦除,因为新的片段会被制作出来,而不是旧的片段被加载。

如果布局中没有添加片段,则以下代码用于添加片段

FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
Fragment1 fragment1 = new Fragment1();
fragmentTransaction.add(R.id.fragment, fragment1, "fragment1");
fragmentTransaction.commit();

以上代码将碎片1添加到R.id.fragment

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

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

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

最新更新