Android fragments 如何删除(而不是替换)FrameLayout中存在的片段?
我有一个FrameLayout的ID,它在任何给定的时间承载不同的片段(由不同的标记标识)。有时我希望删除(而不是替换)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,如果有任何东西返回(我希望容器中当前有一
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