你可以将合并标签与片段一起使用吗?

时间:2012-11-12 17:29:01

标签: android android-layout merge android-fragments

如果我使用merge标记作为我片段布局的父标记,我会遇到两个问题:

  • 首先,在onCreateView()中,如果我指定NOT不附加到root,我会收到错误:

    android.view.InflateException: <merge /> can be used only with a valid ViewGroup root and attachToRoot=true

  • 如果我附加到root,我会收到错误:

    java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.

我在这里找到了另一个问题的一个很好的答案,说片段库会自动将子项附加到您在replace中指定的父视图组。建议您需要将attachToRoot设置为false。对于merge标记,它是必需的。

是否可以绕过这些规则中的任何一个来使用merge标记来处理片段的布局?

1 个答案:

答案 0 :(得分:43)

  

是否可以绕过这些规则中的任何一个来使用合并   片段布局的标签?

没有。如您所见,当您将merge标记作为其根目录的布局文件膨胀时,必须将其附加到有效的父ViewGroup。将其附加到onCreateView中的容器是不正确的,因为该方法返回的View将由框架添加。

您总是可以在onCreateView方法中创建一个包装器布局,以附加膨胀的布局(并返回此包装器布局),但这会使merge标签优化无效从头开始在xml布局文件中添加包装器布局:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
     LinearLayout wrapper = new LinearLayout(getActivity()); // for example
     inflater.inflate(R.layout.layout_with_merge_as_root, wrapper, true);
     return wrapper;
}