2016-06-09 30 views
3

我試圖將正確的數據綁定功能添加到我的項目中,但由於某種原因它仍然失敗。Gradle:未指定任何資源類型(在'text'中,值爲'@ {user.name}')。數據綁定不起作用

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}').

我該怎麼做才能解決這個問題?

+0

把這個換成

+0

這不會有幫助。我只是從代碼中刪除我的公司擴展,忘記從分級中刪除它。在現實生活中他們是一樣的 –

+0

這是你的主包名稱 - 鍋板? –

回答

11

這不是佈局文件的正確結構。對於數據綁定配置文件:

  • 根元素爲<layout>(不<LinearLayout>
  • <layout>有一個孩子<data>元素,類似於你再
  • 您的意見遵循<data>元素的子<layout>

例如,在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> 
+0

是的,謝謝。已經自己找到了。但是我很困惑,官方指南中沒有這樣的指示,至少我沒有找到任何指示。您能否請我指出一些文檔描述哪種佈局需要用於哪種情況? –

+0

@silent_coder:https://developer.android.com/topic/libraries/data-binding/index.html#writing_expressions「數據綁定佈局文件略有不同,從一個佈局的根標籤開始,後跟一個數據元素,一個視圖根元素,這個視圖元素是你的根在非綁定佈局文件中的東西。「 – CommonsWare