用片段替换某些东西

时间:2014-03-25 15:54:50

标签: android layout android-fragments fragment

如果我用这段代码替换(假设)一个片段的TextView:

transaction.replace(R.id.TextView01, fragment1);

新片段(现在在布局中可见)是否与被替换的片段具有相同的ID? (在这种情况下,它是R.id.TextView01)。

这可能看起来像废话,但我将此操作设置为按钮上的操作并重复按下它不会导致任何错误。

那么,它是否具有被替换的id的id或者当我点击几次时它不会被替换(因为片段已经获得了它的唯一ID)?

2 个答案:

答案 0 :(得分:1)

执行replace(id, fragment)后,您不会替换id,而是view。第一个参数是int containerViewId,它用于:

  

要替换其片段的容器的标识符

这只是容器。正如您可以知道的那样,替换方法是removeadd方法的组合。当您查看remove方法时,您可以阅读:

  

删除现有片段。如果它已添加到容器中,则其视图也将从该容器中删除。

您使用remove(Fragment fragment),不使用任何id。此外,“从该容器”意味着未在布局上删除容器,因此您不要使用任何id而不是容器ID。
拥有“id”的唯一方法是使用:

replace(int containerViewId, Fragment fragment, String tag)  

String tag允许您使用findFragmentByTag(String)检索此片段 最后,正如@Squonk所说,将TextView替换为Fragment真是“丑陋”,甚至更多地使用LinearLayoutRelativeLayout等视图组替换。显示片段的“正确”方式是FrameLayout

  

旨在屏蔽屏幕上的某个区域以显示单个项目。

如果您搜索一点FrameLayoutLinearLayoutRelativeLayout等,请延伸ViewGroup,但唯一可以包含片段并重叠视图的是FrameLayout {{1}} 1}}(就像一个特殊的ViewGroup)。

答案 1 :(得分:0)

Fragments不是Views。视图应具有唯一ID,并且片段本身应具有唯一ID。但是在大多数情况下,片段可能具有视图ID。

在您的情况下,是的,他们有相同的ID。

但我认为这可能是一个额外的问题。当Fragments视图膨胀时,视图将作为提供的ID中的子项添加。由于您的视图仅为TextView且不支持子视图,因此我不确定此处是否添加了actually片段。