我有一个FrameLayout的ID,它在任何给定时间托管不同的片段(由不同的标签标识)。我有时希望删除(不替换)当前FrameLayout容器中的任何片段。这是我尝试过但没有用的东西:
Fragment f = fm.findFragmentById(R.id.framelayout_container);
if (f != null) {
txn.remove(f);
}
txn.commit();
所以,我正在传递容器的ID,如果有什么东西回来(我期待当前容器中有一个片段)我想删除它。
问题是,当我再次调用上面的内容(另一个UI事件,如按钮点击)时,findFragmentById再次返回完全相同的片段,就像先前的删除/提交没有做任何事情一样。
顺便说一句,replace()工作正常 - 我只是在使用remove()。
答案 0 :(得分:0)
在上面的问题花了更多的时间后,我发现调用remove()实际上并没有从FragmentManager(duh)中删除片段 - 即后续调用findFragmentById仍然返回原始片段。 remove()对片段的作用是改变它的" isAdded"国家,特别是:
(jeez,他们现在还没用完所有的动词吗?)
我希望在调用remove()之后实际从管理器中删除片段,有点像从DOM树中删除节点。傻我。