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

Android fragments 如何删除(而不是替换)FrameLayout中存在的片段?,android-fragments,Android Fragments,我有一个FrameLayout的ID,它在任何给定的时间承载不同的片段(由不同的标记标识)。有时我希望删除(而不是替换)FrameLayout容器中当前存在的任何片段。以下是我尝试过但没有成功的地方: Fragment f = fm.findFragmentById(R.id.framelayout_container); if (f != null) { txn.remove(f); } txn.commit(); 因此,我正在传递容器的ID,如果有任何东西返回(我希望容器中当前有一

我有一个FrameLayout的ID,它在任何给定的时间承载不同的片段(由不同的标记标识)。有时我希望删除(而不是替换)FrameLayout容器中当前存在的任何片段。以下是我尝试过但没有成功的地方:

Fragment f = fm.findFragmentById(R.id.framelayout_container);
if (f != null) {
    txn.remove(f);
}
txn.commit();
因此,我正在传递容器的ID,如果有任何东西返回(我希望容器中当前有一个片段),我希望将其删除

问题是,当我再次调用上面的代码时(另一个UI事件,如button click),findFragmentById再次返回完全相同的片段,就好像之前的remove/commit没有执行任何操作一样


顺便说一句,replace()工作得很好——我只在处理remove()。

在花了更多时间解决上述问题后,我发现调用remove()实际上并没有从FragmentManager(duh)中删除片段——也就是说,对findFragmentById的后续调用仍然返回原始片段。remove()对片段的作用是更改其“isAdded”状态,具体来说:

  • fragment.isAdded()返回false
  • fragment.isDetached()返回false
  • fragment.isInLayout()返回false
  • fragment.ishiden()返回false
(天哪,他们现在还没有用尽所有动词吗?)

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