数据绑定错误:只允许一个布局元素和一个数据元素。

时间:2016-04-09 17:12:09

标签: android data-binding

使用数据绑定和包含标记时,我遇到以下错误:

Error:Execution failed for task ':app:dataBindingProcessLayoutsBetaDebug'.>data binding error msg:Only one layout element and one data element are allowed. [path to file] has 3file:[path to file]****\ data binding error ****

这是我的布局文件:     

[...]

        <LinearLayout
            android:id="@+id/activity_description_content"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:orientation="vertical">

            <include
                android:id="@+id/activity_description_header_bottom"
                layout="@layout/activity_description_header_bottom" />

            <include
                android:id="@+id/activity_description_contact_info"
                layout="@layout/activity_description_contact_info" />

            <include
                android:id="@+id/activity_description_other_info_box"
                layout="@layout/activity_description_other_info_box" />

            <include
                android:id="@+id/activity_description_bottom_buttons"
                layout="@layout/activity_description_bottom_buttons" />
        </LinearLayout>
[...]
</layout>

在每个包含的布局中,我都有类似的东西:

<layout xmlns:android="http://schemas.android.com/apk/res/android">
[...]
</layout>

从这个回复:Android Data Binding using include tag我想我的代码是正确的,为什么数据仓认为我在文件中使用的不仅仅是单个标签?

5 个答案:

答案 0 :(得分:57)

我解决了我的问题。当布局标记中包含多个元素时,会出现此错误:

错:

<layout>
     <data>
          ...
     </data>
     <LinearLayout>
          ...
     </LinearLayout>
     <LinearLayout>
          ...
     </LinearLayout>
</layout>

正确:

<layout>
     <data>
          ...
     </data>
     <LinearLayout>
         <LinearLayout>
              ...
         </LinearLayout>
         <LinearLayout>
              ...
         </LinearLayout>
     </LinearLayout>
</layout>

答案 1 :(得分:4)

In&lt;布局&gt;,必须有一个&lt;数据&GT;和一个layoutView(相对/线性等).... 不允许使用多个layoutView,在layoutViews中可能有多个layoutViews但在顶层上不允许多重... ....

答案 2 :(得分:1)

布局标签不允许有多个孩子,请把您的所有xml代码放在任何父布局(例如相对/线性布局)中

示例

<layout>

 <LinearLayout> 
................
............... 
</LinearLayout> 
</layout>

答案 3 :(得分:0)

当您使用DataBinding并使用不带标记的标记

时,此错误也会产生

正确

<layout>
 <data>
      <variable>
      </variable>
 </data>
 <LinearLayout>
      ...
 </LinearLayout>
 <LinearLayout>
      ...
 </LinearLayout>

换句话说,你必须在xml中使用数据绑定结构

答案 4 :(得分:0)

  • ViewBinding仅允许使用一个布局元素。
  • DataBinding仅允许一个布局元素和一个数据元素。

build.gradle(:mobile)

android {
    //...

    buildFeatures{
        viewBinding = true
    }
}

请勿将android:layout_widthandroid:layout_height用作<layout/>标记的属性,因为否则dataBinding已经将其视为一个视图,那么在layot范围内,我们无法放置另一个视图。

test.xml

<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">

    <View
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <!-- ... -->

    </View>

</layout>

GL