Pregunta Error al usar databinding en Android


Estoy tratando de probar el enlace de datos como se indica en la guía aquí. He incluido esto en mi archivo build.gradle (de la aplicación del módulo):

compileSdkVersion 'android-MNC'
buildToolsVersion '23.0.0 rc2'

En el archivo build.gradle del proyecto, he incluido esto en mis dependencias:

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

El archivo de diseño es exactamente el mismo que el proporcionado en la guía.

<?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>

Inicialmente dio un error Element layout does not have the required attribute layout_width and layout_height.

Intenté solucionarlo asignando match_parent a ambos. Luego recibí el error Error parsing XML: duplicate attribute en las líneas donde asigné layout_height y layout_width a la disposición lineal.

Nuevamente traté de arreglar esto eliminando estos atributos. Ahora cada vez que trato de compilar, veo esto- error: package my.package.name.databinding no existe.

La finalización del código está funcionando perfectamente en mi Fragmento donde estoy tratando de usar este diseño.

Así que ... qué me perdí ?


32
2018-06-12 05:11


origen


Respuestas:


eliminar apply plugin: 'com.neenbedankt.android-apt' de mi build.gradle resolvió mi problema.


17
2017-09-21 09:17



Tus enlaces en el archivo xml pueden no ser válidos.

Asegúrate de volver a verificar

  1. Son type atributos de referencia válida para el objeto de datos? type="my.package.Class"
  2. ¿El enlace es válido? name="client" -> "@{client.field}"
  3. ¿Son accesibles los campos de datos? public o encapsulado con getters
  4. Son los nombres de los campos en java y el archivo xml que coincida, compruebe si hay errores tipográficos
  5. Si ha cambiado el nombre del archivo xml, asegúrese de actualizar también los objetos vinculantes. OldNameBinding -> NewNameBinding
  6. Proyecto limpio

19
2017-08-06 08:45



generalmente se debe a que hay un error en su archivo de diseño XML y no puede generar el objeto vinculante. Asegúrese de escribir el tipo de datos correctamente, marque la parte inferior o superior de su escritura.

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

Y asegúrese de que el objeto tenga la llamada correcta:

    <TextView android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@{yourObject.name}"/>
    <TextView

3
2017-09-29 06:12



Esto parece ser un problema en el estudio de Android. El editor lo marcará como un error, sin embargo, aún se compilará.

Tuve el mismo problema y cloné este repo de ejemplo para probar que mi sistema está configurado correctamente para admitir la API de enlace de datos. https://github.com/mgrzechocinski/android-bindings-example

Ignorar la advertencia de error en el layout etiqueta. Está mal.

Algo que noté es que no necesariamente requiere el data etiquetar si simplemente está utilizando el enlace de datos para obtener acceso a los elementos de vistas a través de la clase BindingActivity que se genera.


1
2018-06-13 21:36



Si está utilizando el complemento 'android-apt' para daga u otras bibliotecas, después de habilitar el enlace de datos, debe eliminar el complemento 'android-apt' y usar 'provided' en lugar de 'apt' en sus dependencias. Por ejemplo, si está usando daga, elimine esto

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

y esto

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

y luego reemplazar

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

con

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

1
2017-12-24 06:55



De acuerdo con la versión actual de la guía (11/11/2015) solo tiene que agregar dos dependencias: En el archivo build.gradle del proyecto, agregue la dependencia gradle. Actualmente el más reciente versión es 1.5.0-beta3

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

Y en el archivo build.gradle del módulo, incluya la sección dataBinding:

android{
  ...
  dataBinding {
        enabled = true
    }
  ...
}

El error

error: el paquete my.package.name.databinding no existe

puede ocurrir porque hay un desajuste entre el xml y la clase POJO


0
2017-11-11 14:59



Debe tener mucho cuidado de que los miembros de su clase POJO sean public si no está creando los setters getter.

Si tiene un POJO simple sin ningún captador o colocador

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

Si haces getter setter, clase de estilo 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
2018-01-07 10:29



En mi caso, el problema era que estaba agregando layout_height y layout_width al layout etiqueta y también a mi diseño de raíz. Acabo de eliminar ambos atributos del layout etiqueta y resolvió el problema.


0
2018-03-13 04:54