如何删除(不替换)FrameLayout中存在的片段?

时间:2015-09-07 19:41:10

标签: android-fragments

我有一个FrameLayout的ID,它在任何给定时间托管不同的片段(由不同的标签标识)。我有时希望删除(不替换)当前FrameLayout容器中的任何片段。这是我尝试过但没有用的东西:

Fragment f = fm.findFragmentById(R.id.framelayout_container);
if (f != null) {
    txn.remove(f);
}
txn.commit();

所以,我正在传递容器的ID,如果有什么东西回来(我期待当前容器中有一个片段)我想删除它。

问题是,当我再次调用上面的内容(另一个UI事件,如按钮点击)时,findFragmentById再次返回完全相同的片段,就像先前的删除/提交没有做任何事情一样。

顺便说一句,replace()工作正常 - 我只是在使用remove()。

1 个答案:

答案 0 :(得分:0)

在上面的问题花了更多的时间后,我发现调用remove()实际上并没有从FragmentManager(duh)中删除片段 - 即后续调用findFragmentById仍然返回原始片段。 remove()对片段的作用是改变它的" isAdded"国家,特别是:

  • fragment.isAdded()返回false
  • fragment.isDetached()返回false
  • fragment.isInLayout()返回false
  • fragment.isHidden()返回false

(jeez,他们现在还没用完所有的动词吗?)

我希望在调用remove()之后实际从管理器中删除片段,有点像从DOM树中删除节点。傻我。