【发布时间】:2016-01-07 02:01:27
【问题描述】:
谁能解释为什么这段代码不起作用?
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(片段确实有一个现有实例){加载现有版本而不是创建新版本,并用找到的现有片段替换当前片段}
编辑
略微更新的代码。同样的问题,生成了新的片段,而不是加载片段的现有实例。
澄清
每次都会生成新的片段,而不是加载现有的片段。如果我写了一些东西,请转到一个新片段,然后尝试返回旧片段,所有文本都被擦除,因为新片段是生成的,而不是旧片段被加载。
【问题讨论】:
-
你调试过tag的值吗??
-
您的
if条件表示如果片段为空,您正在加载null fragment。你到底在做什么。 ?fragmentManager.beginTransaction().replace(R.id.activity_content, fragment, tag).commit(); -
Bharat - 谢谢,愚蠢的错误......没有睡眠和编码不计算......原来的问题仍然存在,新的片段不会加载现有实例
标签: java android android-fragments fragment