Gradle:未指定资源类型(在'text'处,值为'@ {user.name}')。数据绑定不起作用 [英] Gradle: No resource type specified (at 'text' with value '@{user.name}'). Databinding not working
本文介绍了Gradle:未指定资源类型(在'text'处,值为'@ {user.name}')。数据绑定不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试向项目中添加适当的数据绑定功能,但是由于某些原因它仍然失败。
Im trying to add proper databinding functionality into my project, but for some reason it's still fail.
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'
}
布局文件看起来像这样:
layout file looks like this:
<?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>
但是在尝试构建代码时,我遇到以下错误:
But when trying to build the code I have this errors:
错误:(23,34)渐变:未指定资源类型(在文本中,值为 @ {user.name})。
错误:(38,35)Gradle:未指定资源类型(在 text中,值为 @ {user.email})。
错误:(49,38)Gradle:未指定资源类型(在'text'中值为'@ {user.password}')。
我应该怎么做才能解决此问题?
What should i do to fix this?
推荐答案
那不是布局文件的正确结构。对于数据绑定布局文件:
That is not the proper structure for the layout file. For a data binding layout file:
- 根元素为
< layout>
(不是< LinearLayout>
) -
< layout>
具有子元素< data>
,类似于您的子元素 - 您的视图然后遵循
< data>
元素为< layout>
- The root element is
<layout>
(not<LinearLayout>
) - The
<layout>
has a child<data>
element, akin to yours - Your views then follow the
<data>
element as a child of<layout>
例如,在此示例项目中,我有:
<?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>
这篇关于Gradle:未指定资源类型(在'text'处,值为'@ {user.name}')。数据绑定不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文