web-dev-qa-db-ja.com

androidでのデータバインディングの使用エラー

ガイドにあるデータバインディングをテストしようとしています here 。私はこれを(モジュールアプリの)私のbuild.gradleファイルに含めました:

compileSdkVersion 'Android-MNC'
buildToolsVersion '23.0.0 rc2'

プロジェクトbuild.gradleファイルで、これを依存関係に含めました。

classpath "com.Android.tools.build:gradle:1.3.0-beta2"
classpath "com.Android.databinding:dataBinder:1.0-rc0"

レイアウトファイルは、ガイドに記載されているものとまったく同じです。

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:Android="http://schemas.Android.com/apk/res/Android">
<data>
   <variable name="user" type="com.example.User"/>
</data>
<LinearLayout
   Android:orientation="vertical"
   Android:layout_width="match_parent"
   Android:layout_height="match_parent">
   <TextView Android:layout_width="wrap_content"
       Android:layout_height="wrap_content"
       Android:text="@{user.firstName}"/>
   <TextView Android:layout_width="wrap_content"
       Android:layout_height="wrap_content"
       Android:text="@{user.lastName}"/>
</LinearLayout>
</layout>

最初はエラーが発生しましたElement layout does not have the required attribute layout_width and layout_height

Match_parentを両方に割り当てて修正しようとしました。その後、エラーが発生しましたError parsing XML: duplicate attributeを割り当てた行でlayout_heightおよびlayout_width線形レイアウト。

繰り返しますが、これらの属性を削除してこれを修正しようとしました。今、私はコンパイルしようとするたびに、私はこれを見る-error: package my.package.name.databinding 存在しない。

このレイアウトを使用しようとしているフラグメントでは、コード補完が完全に機能しています。

それで私は何を見逃しましたか?

33
axay

削除apply plugin: 'com.neenbedankt.Android-apt'私のbuild.gradleが私の問題を解決しました。

17
sakirk

Xmlファイルのバインディングが無効である可能性があります。

必ず再確認してください

  1. type属性はデータオブジェクトへの有効な参照ですか? type="my.package.Class"
  2. バインディングは有効ですか? name="client"-> "@{client.field}"
  3. データフィールドにアクセスできますか? publicまたはゲッターでカプセル化
  4. Javaのフィールド名とXMLファイルが一致しているか、タイプミスがないか確認してください
  5. Xmlファイルの名前を変更した場合は、Bindingオブジェクトも必ず更新してください。 OldNameBinding -> NewNameBinding
  6. クリーンプロジェクト
20
Tapirboy

通常は、XMLレイアウトファイルにエラーがあり、バインディングオブジェクトを生成できないためです。データ型を正しく記述していることを確認し、記述の下部または上部を確認してください。

    <data>
        <variable name="yourObject" type="com.example.simple.YourObject"/>
    </data>

そして、オブジェクトが正しい呼び出しであることを確認してください:

    <TextView Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:text="@{yourObject.name}"/>
    <TextView
3
Lay Leangsros

これはAndroid studio。

私は同じ問題を抱えていたので、このサンプルリポジトリをクローンして、システムがデータバインディングAPIをサポートするように正しく構成されていることをテストしました https://github.com/mgrzechocinski/Android-bindings-example

layoutタグのエラー警告を無視します。違います。

気づいたのは、生成されたBindingActivityクラスを介してデータバインディングを使用してビューアイテムにアクセスする場合は、dataタグを必ずしも必要としないことです。

1
Alec Holmes

ダガーまたは他のライブラリに「Android-apt」プラグインを使用している場合、データバインディングを有効にした後、依存関係で「Android-apt」プラグインを削除し、「apt」ではなく「provided」を使用する必要があります。たとえば、短剣を使用している場合は、これを削除します

classpath 'com.neenbedankt.gradle.plugins:Android-apt:1.4'

この

apply plugin: 'com.neenbedankt.Android-apt' 

そして次に交換

apt 'com.google.dagger:dagger-compiler:2.0'

provided 'com.google.dagger:dagger-compiler:2.0'
1
hadilq

ガイドの 現在のバージョン (2015-11-11)によると、2つの依存関係を追加する必要があります。プロジェクトのbuild.gradleファイルにgradle依存関係を追加します。現在、最新の version は1.5.0-beta3です

dependencies {
        classpath 'com.Android.tools.build:gradle:1.5.0-beta3'
    }

そして、モジュールのbuild.gradleファイルにdataBindingセクションを含めます:

Android{
  ...
  dataBinding {
        enabled = true
    }
  ...
}

エラー

エラー:パッケージmy.package.name.databindingは存在しません

xmlとPOJOクラスの不一致が原因で発生する可能性があります

0
Jonnathan

ゲッターセッターを作成しない場合は、POJOクラスのデータメンバーがpublicになるように非常に注意する必要があります。

ゲッターまたはセッターのない単純なPOJOがある場合

public class User {
   public final String firstName;
   public final String lastName;
   public User(String firstName, String lastName) {
       this.firstName = firstName;
       this.lastName = lastName;
   }
}

ゲッターセッター、javaBeanスタイルクラスを作成する場合

public class User {
   private final String firstName;
   private final String lastName;
   public User(String firstName, String lastName) {
       this.firstName = firstName;
       this.lastName = lastName;
   }
   public String getFirstName() {
       return this.firstName;
   }
   public String getLastName() {
       return this.lastName;
   }
}
0
Salmaan

モデルとレイアウトファイルの間に問題または不一致がある可能性があります。私の場合、私は持っていました:

...
<TextView
            Android:layout_alignParentLeft="true"
            Android:layout_alignParentStart="true"
            Android:layout_toLeftOf="@+id/photo"
            Android:layout_toStartOf="@+id/photo"
            tools:text="0912454433"
            Android:textStyle="bold"
            Android:text="@{contact.cellPhoneNumber}"
            Android:layout_below="@+id/name"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content" />

しかし、私のモデルクラスは次のようでした:

public class MyContact {
    public String name;
    public String cellphoneNumber; // <-- Notice the lowercase 'p'
}
0
Tash Pemhiwa

私の場合、問題はlayout_heightlayout_widthlayoutタグとルートレイアウトに追加していたことです。 layoutタグから両方の属性を削除し、問題を解決しました。

0
Wilder Pereira

//これはactivity_main xmlの下にあります。

  <data>
  <variable
      name="student"
      type="com.example.vishalkamboj.testdatabinding.Student"    />
</data>

//これは学生クラスです

public class Student {

public String firstname; public String lastname;

public Student(String firstname , String lastname)
{
    this.firstname = firstname;
    this.lastname = lastname;

}

}

0
Vishal Kamboj