Je veux utiliser Android Data Binding et a configuré conformément au document officiel.
le message d'erreur est le suivant: erreur: impossible de trouver le symbole import net.juude.droidviews.BR;
le fichier build.gradle
de niveau supérieur est:
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()
}
}
et le fichier build.gradle dans le module d'application est
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'
}
le fichier de mise en page est
<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>
le fragment est
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();
}
}
étant donné que je n'ai pas eu d'erreur de syntaxe dans Android Studio, je peux supposer qu'Android Studio peut reconnaître la classe BR;
Mais lorsque je compile le projet, il me dit que error:cannot find symbol class BR
.
je souhaite donc savoir comment faire pour générer le fichier BR.Java approprié.
C'est un problème causé par le plugin Android-apt. Il ignore la dépendance fournie par le plug-in de liaison de données.
Vous pouvez contourner ce problème en ajoutant: apt 'com.Android.databinding:compiler:1.0-rc0
à votre fichier Gradle.
Dans le cas où quelqu'un a toujours ce problème. J'ai résolu ce problème en invalidant le cache dans Android Studio. Et j'utilise Android Studio 2 avec API 23
Je trouve la cause du problème dans mon cas. Je trouve dans les instructions d'importation de ma classe d'objet de données contient:
import static Android.databinding.tool.util.GenerationalClassUtil.ExtensionFilter.BR;
Le problème est résolu après que j'ai enlevé cela. Android Studio a en quelque sorte résolu mal la classe BR.
L'annotation Bindable génère une entrée dans le fichier de classe BR lors de la compilation. Le fichier de classe BR sera généré dans le package de module.
@Bindable
public String getFirstName() {
return this.firstName;
}
J'ai rencontré ce problème aussi. Le problème était que j'ai changé le nom de la classe et que je n'ai pas mis à jour les valeurs du fichier XML. Cela inclut les noms de variables et leur accès dans le fichier XML.
Pour mon cas, le problème a été causé par
"erreur: la variable MyVariable était déjà définie dans la classe MyModel"
La chose gênante était que Android Studio gradle build n’affiche pas cette erreur en bas. Je devais commenter chaque erreur de liaison de données> Reconstruire le projet jusqu'à atteindre l'erreur. La leçon à retenir était de parcourir chaque erreur de bas en haut et de noter tout ce que vous avez pu changer récemment.
Moi aussi j'ai eu le même message d'erreur, mais ma cause fondamentale était différente de ce qui a été partagé ici.
Dans mon cas, le problème était qu’après avoir résolu un conflit de fusion, j’avais laissé par erreur une annotation supplémentaire @Override
sur une méthode. Ainsi, le préprocesseur de la machine virtuelle Java a échoué et les classes de liaison de données n'ont pas été générées.
La partie irritante pour moi était que je ne pouvais voir aucun message d'erreur lié à cela, ou que c'était difficile à repérer parmi toutes les autres erreurs de compilation. Et Android Studio ne montre pas non plus l'annotation supplémentaire comme une erreur. Donc, si quelqu'un d'autre a des problèmes avec la même erreur, vérifiez que vous n'avez pas d'erreur dans une annotation empêchant le préprocesseur APT de démarrer.
J'ai eu cela, plus 29 autres erreurs surgissent soudainement d'un moment à l'autre. J'ai essayé de nettoyer, de reconstruire, d'invalider les caches/redémarrer et pas de chance. En fin de compte, j'ai supprimé les modifications que j'avais apportées et les ai refaites une par une. Constaté que j'avais @Inject
ed un service dans la mauvaise classe. Une fois que j'ai enlevé que toutes les 30 erreurs avaient disparu. Les erreurs ne donnaient aucune idée de ce que j'avais mal fait.
Le simple redémarrage d’Android Studio, sans invalider le cache, a été une bonne solution (j’utilise la version 2.2.3).
Si vous utilisez la version Android Studio 2.3 et que la configuration de votre projet est la suivante:
Gradle version: 3.3
Android plugin version:2.3.0
Compile sdk Version:23+
build tools Version:25+
Tout ce qu'il faut faire, c'est ajouter
dataBinding{enabled=true}
à build.gradle, puis synchronisez le fichier Gradle.
Pour moi, il a été utile d’exécuter ./gradlew clean build
dans le dossier du projet. Il a montré une erreur que le studio Android n'a pas.
Vous devez ajouter ceci à votre fichier gradle.properties.
Android.databinding.enableV2=true
plusieurs erreurs peuvent indiquer que les classes de liaison ne sont pas trouvées. Le nouveau compilateur de liaison de données empêche ces erreurs en générant les classes de liaison avant que le compilateur géré ne crée votre application.
Si vous utilisez Kotlin, essayez d’appliquer le plug-in suivant à votre fichier app build.gradle
:
apply plugin: 'kotlin-kapt'
Nettoyez votre projet et reconstruisez-le. Cela a résolu le problème pour moi.