Android Data Bindingを使用し、公式ドキュメントに従って構成しました。
エラーメッセージ:エラー:シンボルインポートnet.juude.droidviews.BRが見つかりません。
トップレベルbuild.gradle
ファイルは次のとおりです。
buildscript {
repositories {
jcenter()
}
dependencies {
classpath "com.Android.tools.build:gradle:1.3.0-beta2"
classpath 'me.tatarka:gradle-retrolambda:3.0.1'
classpath 'com.neenbedankt.gradle.plugins:Android-apt:1.4'
classpath "com.Android.databinding:dataBinder:1.0-rc0"
}
}
allprojects {
repositories {
jcenter()
mavenCentral()
}
}
そして、appモジュールのbuild.gradleファイルは
apply plugin: 'com.Android.application'
apply plugin: 'me.tatarka.retrolambda'
apply plugin: 'com.neenbedankt.Android-apt'
apply plugin: 'com.Android.databinding'
Android {
compileSdkVersion 22
buildToolsVersion "22.0.1"
lintOptions {
abortOnError false
}
defaultConfig {
applicationId "net.juude.droidviews"
minSdkVersion 15
targetSdkVersion 22
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.txt'
}
}
retrolambda {
println("Java_HOME: " + System.getenv("Java_HOME"))
println("Java7_HOME: " + System.getenv("Java7_HOME"))
println("Java8_HOME: " + System.getenv("Java8_HOME"))
javaVersion JavaVersion.VERSION_1_7
}
}
dependencies {
compile project(':ptr-lib-debug')
compile project(':library')
compile 'com.Android.support:support-v4:22.1.0'
compile 'com.mcxiaoke.volley:library:1.0.+'
compile files('libs/droidmocks.jar')
compile 'com.Android.support:support-annotations:22.1.1'
compile 'com.facebook.fresco:fresco:0.5.0'
compile 'com.Android.support:recyclerview-v7:22.1.1'
compile 'io.reactivex:rxandroid:0.24.0'
compile 'io.reactivex:rxjava:1.0.6'
compile 'com.google.dagger:dagger:2.0'
apt 'com.google.dagger:dagger-compiler:2.0'
}
レイアウトファイルは
<layout xmlns:Android="http://schemas.Android.com/apk/res/Android">
<data>
<variable name="user" type=" net.juude.droidviews.databinding.User" />
</data>
<LinearLayout
Android:orientation="vertical" Android:layout_width="match_parent"
Android:layout_height="match_parent">
<TextView
Android:id="@+id/user_name"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="@{user.mName}"/>
<TextView
Android:id="@+id/user_sex"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="@{user.sex}"/>
</LinearLayout>
</layout>
フラグメントは
package net.juude.droidviews.databinding;
import Android.databinding.DataBindingUtil;
import Android.databinding.ViewDataBinding;
import Android.os.Bundle;
import Android.support.annotation.Nullable;
import Android.support.v4.app.Fragment;
import Android.view.LayoutInflater;
import Android.view.View;
import Android.view.ViewGroup;
import net.juude.droidviews.BR;
import net.juude.droidviews.R;
/**
* Created by juude on 15-6-9.
*/
public class DataBindingFragment extends Fragment{
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
ViewDataBinding dataBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_data_binding, container, false);
//dataBinding.setVariable(BR.)
User user = new User();
user.setSex("男");
user.setName("Juude");
dataBinding.setVariable(BR.user, user);
return dataBinding.getRoot();
}
}
Android Studioで構文エラーが発生しなかったので、Android StudioはBRクラスを認識できます。
しかし、プロジェクトをコンパイルすると、error:cannot find symbol class BR
。
正しいBR.Javaファイルを生成するために何をすべきか知りたいのですが。
これは、Android-aptプラグインが原因の問題です。データバインディングプラグインが追加する提供された依存関係は無視されます。
以下を追加することで回避できます:apt 'com.Android.databinding:compiler:1.0-rc0
gradleファイルに。
誰かがまだこの問題を抱えている場合。 Android Studioのキャッシュを無効にすることでこれを解決しました。そして、Android Studio 2とAPI 23を使用しています
私の場合、問題の原因を見つけました。私のデータオブジェクトクラスのインポートステートメントには次のものが含まれています:
import static Android.databinding.tool.util.GenerationalClassUtil.ExtensionFilter.BR;
私はそれを削除した後、問題が解決されます。 Android StudioはどういうわけかBRクラスを間違って解決しました。
Bindableアノテーションは、コンパイル時にBRクラスファイルにエントリを生成します。モジュールパッケージにBRクラスファイルが生成されます。
@Bindable
public String getFirstName() {
return this.firstName;
}
Kotlinを使用している場合、次のプラグインをアプリに適用してくださいbuild.gradle
ファイル:
apply plugin: 'kotlin-kapt'
プロジェクトをクリーンアップして、再度ビルドします。これで問題が解決しました。
私もこの問題に遭遇しました。問題は、クラス名を変更し、XMLファイルの値を更新しなかったことです。これには、変数名と、xmlファイル内の変数へのアクセス場所が含まれます。
私の場合、問題の原因は
「エラー:変数MyVariableはクラスMyModelですでに定義されています」
迷惑なのはAndroid Studio gradleビルドは下部にこのエラーを表示しませんでした。各データバインディングエラーをコメントする必要がありました。エラーに達するまでプロジェクトを再構築します。下から上に移動して、最近変更した可能性のあるものに注目してください。
私も同じエラーメッセージを受け取りましたが、根本原因はここで共有されたものとは異なりました。
私の場合、問題は、マージの競合を解決した後、誤って余分な@Override
メソッドの注釈。したがって、JVMプリプロセッサは失敗し、データバインディングクラスも生成されませんでした。
私にとっていらいらした部分は、これに関連するエラーメッセージが表示されなかったこと、または他のすべてのコンパイラエラーを見つけるのが困難だったことです。また、Android Studioは追加の注釈をエラーとして表示しません。だから、他の誰かが同じエラーで苦労している場合は、= APTプリプロセッサが起動します。
これに加えて、ある瞬間から次の瞬間に突然29個のエラーが発生しました。クリーン、リビルド、キャッシュの無効化/再起動を試みましたが、運はありませんでした。最後に、行った変更を削除し、1つずつ変更しました。 @Inject
ed間違ったクラスのサービス。 30個すべてのエラーがなくなったことを削除したら。エラーは、私が間違ったことをする手がかりを与えませんでした。
Android Studio、キャッシュを無効にせずに再起動するだけで、私にとってはうまくいきました(バージョン2.2.3を使用しています)。
Android Studio 2.3リリースを使用し、プロジェクト構成が次のとおりである場合:
Gradle version: 3.3
Android plugin version:2.3.0
Compile sdk Version:23+
build tools Version:25+
追加するだけです
dataBinding{enabled=true}
build.gradleに、その後gradleファイルを同期します。
これをgradle.propertiesファイルに追加する必要があります
Android.databinding.enableV2=true
バインディングクラスが見つからないことを報告する複数のエラーが表示される場合があります。新しいデータバインディングコンパイラは、マネージコンパイラがアプリをビルドする前にバインディングクラスを生成することにより、これらのエラーを防ぎます。
私にとっては、./gradlew clean build
プロジェクトフォルダー。 Android studioはしませんでした。
BRはコンパイル中に生成されます。Build -> Rebuild project
がトリックを行う必要があります。しかし、私にとってそれはエラーで失敗しました:e:/home/xx/File.kt: (24, 46): Expecting an element
その行には不完全なBR.
があったからです。 .
の後にコメントするか何かを追加して、再構築するだけで解決しました。
次の手順に従ってください。1.BaseObservableクラスでクラスを拡張します2.各getterメソッドに@Bindableアノテーションを追加します。 3.プロジェクトを再構築します。これでBRにアクセスできるようになります
Dagger 2を使用している場合、問題はDaggerのコンポーネントが原因である可能性があります。 2つのライブラリは関連していませんが、私の場合、コンパイラで報告されたDaggerのエラーを修正すると、BRクラスが再び正しく表示されます。
私の場合、エンティティの1つに@PrimaryKeyアノテーションを提供しておらず、ログに見つける手がかりがないため、このエラーを見つけるのは本当に困難でした。そのため、必ずエンティティに主キーを指定してください。そうしないと、このエラーが発生します。
私の場合、プロジェクトを実行するだけで問題が解決しました。