tutorial studio español ejemplo databinding data android data-binding android-databinding

android - studio - data binding español



Clase de enlace de datos no generada (21)

Estoy usando Enlace de datos en mi proyecto, cuando no se genera <layout> y <data> en mi clase de enlace xml.

Por ejemplo, tengo activity_main.xml

<?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> </data> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> </RelativeLayout> </layout>

Ahora, si estoy escribiendo ActivityMainBinding en mi actividad / fragmento, muestra un error de que la clase no está disponible. Pero después de incluir <variable> en mi archivo xml, puede generar la clase ActivityMainBinding .

Android Studio: 2.1.3
Classpath: com.android.tools.build:gradle:2.1.3
minSdkVersion 16
targetSdkVersion 24
buildToolsVersion 24.0.0


1.Agregar a continuación en la aplicación gradle

dataBinding { enabled = true }

2.En el diseño xml, escriba debajo del código

<layout xmlns:android="http://schemas.android.com/apk/res/android"> <data></data> </layout>if you don''t get data binding class just rename the layout file name and you will get data binding class.


Clase DataBinding generada automáticamente.

si su nombre xml es activity_test, la clase Binding será ActivityTestBinding.

pero,

dataBinding { enabled = true }

el diseño debe tener un diseño como raíz

<layout xmlns:android="http://schemas.android.com/apk/res/android"> </layout>


Cuando trabaje con una aplicación de Android multimódulo, verifique su ruta de clase de enlace. Quizás deberías usar:

import com.yourcompany.app.android.modulename.databinding.FragmentABCtBinding de:

import com.yourcompany.app.android.databinding.FragmentABCtBinding


Después de haberlo configurado correctamente (incluido el espacio de nombres xml y envolver todo en <layout> ), el que funcionó para mí fue Build -> Make project. Ni Clean Project ni Rebuild Project lo hicieron. Estoy en Android Studio 2.3.1, usando las herramientas de compilación 26.0.2. No hay necesidad de etiquetas <data> .


Elimine diseños y deshaga, y asegúrese de que las clases de enlace generadas se importen correctamente después de eso.


En caso de que obtenga el siguiente error en DataBindingUtil.setContentView

Referencia no resuelta: actividad_principal

todo lo que necesita hacer es eliminar la siguiente declaración de importación

importar android.R

Encontré la solución en otro foro. Fuente


En mi caso, la clase Binding fue generada y en su lugar (pero pensé que no) ... pero no agrega automáticamente la importación de dicha clase a la sección de importación de actividad / fragmento ... así que ... OPTION + ENTRAR :)


En mi caso, pensé que la clase generada tenía que aparecer con mis clases habituales en la carpeta src . Además, pensé que el nombre de la clase generada debería ser ligeramente diferente. Todo fue mi error. La clase generada se puede encontrar en la carpeta de build -> generated -> ... , build -> generated -> ... ruta. Si no hay importación de la clase generada en su actividad, agregue la importación

<layout xmlns:android="http://schemas.android.com/apk/res/android"> <data></data> </layout>if you don''t get data binding class just rename the layout file name and you will get data binding class.


Gracias a esta respuesta aquí , parece que el "espacio de nombres de diseño" necesita ser borrado, o necesita un nuevo nombre único.

Estas son las opciones que me funcionaron:

  1. Cree un nombre nuevo para el diseño para asegurarse de que se pueda generar. Esto resolvió mi problema, donde tenía un diseño que se creó por primera vez, sin enlace de datos , llamémoslo fragment_abc.xml . Cuando intenté agregarle un enlace de datos, no se reconoció, incluso después de varias llamadas de borrado de caché y reinicio. Sin embargo, tan pronto como hice una copia del diseño fragment_abc2.xml , inmediatamente obtuve el objeto de enlace de datos generado .java / .class.

  2. Después de ver el trabajo anterior, intenté eliminar la carpeta / build del módulo y reconstruir el proyecto, esto funcionó para obtener el enlace de datos para el diseño original.


Las clases de enlace de datos se generan durante la compilación, por lo que después de habilitar el enlace de datos en la compilación Gradle de la aplicación y rodear su xml con la etiqueta de diseño, debe reconstruir su aplicación. Si eso no ayuda, elimine su carpeta de compilación y vuelva a hacerlo.


Lo único que puedo imaginar si es posible es si no tienes

import com.yourcompany.app.databinding.ActivityMainBinding;"

en tu archivo gradle. Si no, simplemente agréguelo al archivo gradle. es decir

dataBinding { enabled = true }

luego sincronice su proyecto. Si aún falla, es posible que deba invalidar / reiniciar su estudio de Android


No obtuve ninguna respuesta satisfactoria. Así que aquí están los consejos que es un resumen de mi conocimiento de enlace de datos.

Consejos para resolver problemas de enlace de datos

Actualizar

Para obtener sugerencias y errores más precisos , recomiendo actualizar la versión del complemento de Android Studio y Gradle a la última. Porque no tengo muchos problemas después de la versión AS 3.2.

Consulte el último estudio de Android y el último complemento de Gradle .

Solución original

Después de leer esta respuesta, no se quedará atascado en problemas de generación automática de enlace de datos tanto para las clases como para las variables de datos .

Verifique estos puntos uno por uno. Cualquiera de estos puede hacer su trabajo. El punto 3 al último es realmente importante, así que no te los pierdas.

1. Compruebe si el enlace de datos está habilitado

Debería tener el enlace de datos habilitado en build.gradle . Si no es así, agregue esto y sincronización .

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

2. Comprobar diseño se convierte en diseño vinculante

Ahora, si desea que se genere la clase de enlace de datos, debe ajustar el xml layout con el enlace de datos ( <layout etiqueta de <layout ). Algo como esto.

<?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android"> <android.support.constraint.ConstraintLayout android:layout_width="match_parent" android:layout_height="match_parent"> </android.support.constraint.ConstraintLayout> </layout>

3. ¿Nombre de clase de enlace generado automáticamente?

Su clase de enlace de datos debe generarse después de crear el diseño de enlace.

Si su nombre de diseño está en el caso de la serpiente activity_main.xml , la clase de enlace de datos se generará en el caso de camello como ActivityMainBinding .

4. ¿No puede ver la sugerencia de importación?

A veces, cuando escribe ActivityMai... , no muestra sugerencia , en ese caso, importe manualmente .

import <yourpackage>databinding.ActivityMainBinding;

5. Leer Build Fail Logcat

Su clase de enlace y las nuevas variables en el diseño no se generarán si falla su compilación. Entonces, primero haga el proyecto por Ctrl + F9 (Build> Make project) .

  • Si la compilación falla, vea qué es un error, generalmente tenemos errores en los campos de diseño. Los registros de errores señalarán el número de línea de error con el problema.
  • El enlace puede fallar y causar algún error estúpido , como error de sintaxis o falta de importación. En ese caso, obtendrá logcat lleno de errores de clases de enlace. Pero debe leer logcat completo para encontrar el problema apropiado .

6. Cerrar y abrir proyecto de reciente

Siempre hago esto porque lleva mucho menos tiempo que el proyecto Rebuild / Make .

  • Cerrar proyecto desde Archivo> Cerrar proyecto
  • Abierto de nuevo desde reciente

Tenga en cuenta que prefiero Cerrar y Abrir desde Reciente porque lleva mucho menos tiempo que Reconstruir / Reiniciar IDE .

7. Proyecto de reconstrucción

Si aún no se genera su clase. (En algún momento cuando pegamos el archivo de diseño, entonces sucede). Luego, reconstruya el proyecto desde Build> Rebuild ( no compilar o realizar un proyecto ). Generará su clase de enlace de datos. ( Reconstruir hace magia para mí )

8. Tener la última versión de Android Studio

Después de actualizar AS a Android Studio 3.2 , sentí muchas correcciones de errores en la generación automática de enlace de datos. Entonces también deberías tener el último AS.

Solución para <variables

<data> <variable name="item" type="com.package.Model"/> </data>

Por lo general, cuando ponemos variables en el diseño, crea getter y setter. Y podemos usar binding.setItem(item); y binding.getItem(); , pero si no puede ver esos métodos, lea la siguiente información.

1. Cerrar y abrir proyecto de reciente

Si ha creado una variable de datos - <variable en su diseño y no muestra su setter y getter en la clase de enlace de datos, entonces Cerrar y Abrir desde Reciente su proyecto.

2. Proyecto limpio después de cambiar el tipo

Si cambió el tipo de alguna <variable en su diseño y el tipo de setter getter no cambia, entonces Clean project ( Build> Clean Project )

Ultimas palabras

Finalmente, si aún no se genera su clase de enlace, entonces tenemos nuestra arma más poderosa. - Reinicie Android Studio: D

  • Primero intente simplemente reiniciar , esto siempre genera variables de mi diseño de enlace después de reiniciar.
  • Si no funciona, invalide la memoria caché y reinicie .

Esto es todo lo que hago para resolver mis errores de enlace de datos. Si tienes más problemas, puedes comentar aquí.


No sé si funcionará para ti o no. Simplemente cambie el nombre del archivo XML de diseño. Supongamos que su nombre de diseño es activity_main.xml, simplemente cambie el nombre por el de main.xml y vuelva a cambiarle el nombre a activity_main.xml . Luego puede ver la opción de importación en ActivityMainBinding .

Espero que funcione para ti.


Obtuve el problema y el problema estaba en el diseño, el campo utilizado no era una Cadena, era una Fecha.

Parece que todos los campos deben ser texto para trabajar, al menos con el componente TexView.

Si compila con el comando ./gradlew build --stacktrace

Esto muestra mejor los errores.


Si recientemente alguien migró un proyecto existente a androidx, entonces debe reemplazar su importación de

dataBinding { enabled true }

a

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

Después de que Google 2 días finalmente obtuviera la solución, cuál funciona para mí.


Tuve el mismo problema Todo lo que hiciste bien. La cosa es que necesita agregar variables dentro de la etiqueta de datos en xml. Para eso, debe crear una clase de modelo de muestra y agregarla como variable en la etiqueta de datos.

Hasta ese momento, no podrá ver ActivityMainBinding generado.


Tuve el mismo problema. Después de leer sobre los documentos SDK de Android, solo se creará el nombre de archivo esperado, pero nada sobre qué hacer si no sucede. Después de investigar un poco más, noté que después de eliminar el espacio de nombres del elemento de diseño como se muestra a continuación (usando su ejemplo), funcionó para mí.

<?xml version="1.0" encoding="utf-8"?> <layout> <data> </data> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> </RelativeLayout> </layout>


Tuve un problema similar en el que tenía el diseño envuelto y mi enlace de datos habilitado en el archivo gradle. La actividad principal todavía no podía entender o ver mis clases. Lo que me solucionó fue agregar la variable de enlace e importar el enlace de todos modos. A partir de ahí, acabo de construir la solución y luego pareció saber cuál era la clase. Desde allí pude importar mis clases de casos de camellos que se generaron.


si realiza un trabajo base, para habilitar el enlace de datos en su proyecto, como usar enable en gradle y usar la etiqueta de diseño en xml , cuando cambia el código xml y no genera una nueva clase de enlace de datos para esos xml, puede usar una forma rápida para generar solo datos clase de enlace en gradle-> other-> databindinggenbaseclasses Depurarlo más rápido que bulid todo el proyecto. solo genera una clase de enlace de datos.


use la ruta de clase ''com.android.databinding: dataBinder: 1.0-rc0''


dataBinding { enabled = true }

Para habilitar el nuevo compilador de enlace de datos, agregue la siguiente opción a su archivo gradle.properties:

android.databinding.enableV2=true