Android Studio数据绑定中不允许使用元素数据

时间:2018-01-04 20:50:18

标签: java android android-studio data-binding android-databinding

我试图制作一种tick-tac-toe android应用程序(虽然使用4x4网格)。我决定使用按钮来描绘每个网格方块,并希望使用数据绑定将按钮上的文本绑定到String [] []数组中的数据,该数组将在内部表示网格。我尝试过类似于此处提供的内容http://www.vogella.com/tutorials/AndroidDatabinding/article.html,所以我创建了这个类:

public class ModelJoc extends BaseObservable{

private String[][] tabla_joc;

public ModelJoc() {
    for (String[] line : tabla_joc)
        for (String element : line)
            element = "";

    tabla_joc[0][0] = "M";
    tabla_joc[0][1] = "W";
}

然后将数据绑定添加到activity_main.xml:

<android.support.constraint.ConstraintLayout 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"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.tgeorge.temajoc.MainActivity">
<data>
    <variable
        name="state"
        type="com.example.tgeorge.temajoc.ModelJoc"/>
</data>

然后尝试将按钮的文本设置为数组中的值:

 <Button
        android:id="@+id/button1"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:text="@={state.getBlockState()[0][0]}"/>

但是它给了我这些错误:&#34;这里不允许使用元素数据&#34;以及&#34;属性缺少android:前缀&#34;。我不能从教程中的示例中说出我做错了什么,所以问题是我应该把这些放在哪里?

1 个答案:

答案 0 :(得分:2)

我想我现在看到了问题。您必须使用<layout>标记概述您的布局:

<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"
        tools:context="com.example.tgeorge.temajoc.MainActivity">
    <data>
      <variable
          name="state"
          type="com.example.tgeorge.temajoc.ModelJoc"/>
    </data>
    <android.support.constraint.ConstraintLayout 
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <!-- ... -->
        <Button
            android:id="@+id/button1"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:text="@{state.getBlockState()[0][0]}"/>

如果你不这样做,android数据绑定不会将其识别为数据绑定布局文件。