我可以删除layout.xml文件中定义的片段吗?

是否可以使用FragmentTransaction和remove()方法来删除layout.xml中定义的片段(使用片段标记)?

我没有使用支持库v4来实现这一点。 在调用remove()之后,在提交FragmentTransaction之后片段保持不变。 任何人都能告诉我这是设计,错误还是function?

可以替换lyaout.xml中定义的片段,所以我觉得有点奇怪的是它不可能删除它?

从Honeycomb开始可用的本机API与支持库中的相同,因此您无法删除已在布局XML文件中声明的Fragment实例。

使用FragmentTransactions,您可以操作ViewGroups,例如LinearLayouts,它充当容器以保存其他片段的布局。 但是,当您在布局中声明Fragment时,它没有相同意义上的容器,因为它永远是View层次结构的一部分,因此您无法将其删除。 这是设计上的,以支持你永远不会删除的导航碎片之类的东西。 🙂

有趣的是,我完全是偶然发现的,你可以将新的碎片添加到用布局中的标签声明的片段中; 它充当其他碎片的容器

我没有使用支持库v4工作。 在调用remove()之后,在提交FragmentTransaction之后片段保持不变。 任何人都能告诉我这是设计,错误还是function?

这是设计(或缺乏一个function,如果你问我,不一定是一个function:P)。 因此,只要您使用支持库,就无法实现这一点。

就像@ david-c-sainte-claire和@martín-marconcini所说,你不能使用remove()方法和FragmentTransaction来删除XML中定义的片段。 这并不意味着你运气不好。 您始终可以使用setVisibility()方法。

 findViewById(R.id.fragment_main).setVisibility(View.GONE);