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

Pla*_*age 42 merge android android-layout 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中指定的父视图组.建议是你需要设置attachToRootfalse.对于merge标签,它是必需的.

有可能绕过这些规则之一来使用merge标签进行片段的布局吗?

Luk*_*rog 45

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

不可以.如您所见,当您将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;
}
Run Code Online (Sandbox Code Playgroud)

  • 这违背了使用合并标记的整个目的.关键是要在布局层次结构中删除额外的ViewGroup图层. (14认同)
  • Android 只是在这里搞砸了。 (2认同)