【问题标题】:Gradle: No resource type specified (at 'text' with value '@{user.name}'). Databinding not workingGradle:未指定资源类型(在“文本”处,值为“@{user.name}”)。数据绑定不起作用
【发布时间】:2016-06-09 10:46:12
【问题描述】:

我正在尝试将适当的数据绑定功能添加到我的项目中,但由于某种原因它仍然失败。

build.gradle 文件如下所示:

apply plugin: 'com.android.application'

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath 'me.tatarka:gradle-retrolambda:3.2.5'
    }
}

repositories {
    mavenCentral()
}

apply plugin: 'com.android.application'
apply plugin: 'me.tatarka.retrolambda'

android {

    compileSdkVersion 23
    buildToolsVersion "24.0.0 rc4"

    defaultConfig {
        applicationId "boilerplate"
        minSdkVersion 16
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    dataBinding {
        enabled = true
    }

}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.4.0'
    compile 'com.android.support:design:23.4.0'
    compile 'io.reactivex:rxandroid:1.2.0'
    compile 'io.reactivex:rxjava:1.1.5'
    compile 'com.jakewharton.rxbinding:rxbinding:0.4.0'
}

布局文件如下所示:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent">

    <data>
        <variable name="user" type="boilerplate.UserModel"/>
    </data>

    <Button android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Test"
            android:id="@+id/btn2"
            android:onClick="OnBtnClick7"
            android:layout_below="@+id/editText3"
            android:layout_alignRight="@+id/editText3"
            android:layout_alignEnd="@+id/editText3"/>

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="textPersonName"
        android:text="@{user.name}"
        android:ems="10"
        android:id="@+id/editText"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"/>

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="textEmailAddress"
        android:ems="10"
        android:id="@+id/editText2"
        android:layout_below="@+id/editText"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:text="@{user.email}"/>

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="textPassword"
        android:ems="10"
        android:id="@+id/editText3"
        android:layout_below="@+id/editText2"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:text="@{user.password}"/>
</LinearLayout>

但在尝试构建代码时出现以下错误:

Error:(23, 34) Gradle: No resource type specified (at 'text' with value '@{user.name}'). Error:(38, 35) Gradle: No resource type specified (at 'text' with value '@{user.email}'). Error:(49, 38) Gradle: No resource type specified (at 'text' with value '@{user.password}').

我应该怎么做才能解决这个问题?

【问题讨论】:

  • 把这个 换成
  • 这无济于事。我只是从代码中删除了我的公司扩展,然后忘记了从 graddle 中删除它。在现实生活中他们是一样的
  • 这是你的主要包名 -boilerplate 吗?
  • 尝试clean项目和rebuild项目。

标签: android data-binding


【解决方案1】:

这不是布局文件的正确结构。对于数据绑定布局文件:

  • 根元素是&lt;layout&gt;(不是&lt;LinearLayout&gt;
  • &lt;layout&gt; 有一个子 &lt;data&gt; 元素,类似于你的
  • 然后您的视图跟随&lt;data&gt; 元素作为&lt;layout&gt; 的子元素

例如,在this sample project,我有:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">

  <data>

    <variable
      name="item"
      type="com.commonsware.android.databind.basic.Item"/>
  </data>

  <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <ImageView
      android:id="@+id/icon"
      android:layout_width="@dimen/icon"
      android:layout_height="@dimen/icon"
      android:layout_gravity="center_vertical"
      android:contentDescription="@string/icon"
      android:padding="8dip"/>

    <TextView
      android:id="@+id/title"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_gravity="left|center_vertical"
      android:text="@{item.title}"
      android:textSize="20sp"/>

  </LinearLayout>
</layout>

【讨论】:

  • 好的,谢谢。我自己已经找到了。但是我很困惑,官方指南中没有这样的说明,或者至少我没有找到任何说明。您能否指出一些文档,其中描述了我需要在哪种情况下使用哪种布局?
  • @silent_coder: developer.android.com/topic/libraries/data-binding/… "数据绑定布局文件略有不同,以布局的根标记开头,后跟数据元素和视图根元素。这个视图元素是您的根元素位于非绑定布局文件中。"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-19
  • 1970-01-01
  • 2020-08-28
  • 1970-01-01
  • 1970-01-01
  • 2017-10-05
  • 1970-01-01
相关资源
最近更新 更多