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

android - studio - data binding español



Android-DataBinding-¿Cómo y cuándo se generarán las clases de Binding? (17)

Estados de la guía de enlace de datos

By default, a Binding class will be generated based on the name of the layout file, converting it to Pascal case and suffixing “Binding” to it. The above layout file was activity_main.xml so the generate class was ActivityMainBinding.

¿Cuándo se generará la clase Binding, aquí digamos ActivityMainBinding? Tengo un error de tiempo de compilación. "no se puede resolver ActivityMainBinding".

ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.main_activity);

Cualquier ayuda es apreciada. Gracias


Regla

El nombre del diseño está en snake_case , y el nombre de la clase de enlace generado será PascalCase .

Si el nombre del diseño es activity_home.xml , el nombre de la clase de enlace será ActivityHomeBinding.class .

Problema

  1. Muchas veces no obtienes sugerencias de importación de la clase DataBinding.
  2. La clase de enlace no se genera cuando hay algún problema en el diseño.
  3. La clase de enlace no está disponible cuando falla la compilación

Aquí está el hack

Cuando no obtienes sugerencia de importación

  • Cuando no recibes una sugerencia de importación. Importe manualmente su clase de enlace de esta manera. (IDE a menudo no muestra sugerencias para las clases vinculantes)

    import <yourpackage>databinding.ActivityMainBinding;

¿La línea de importación todavía muestra error?

  • Si su línea de importación muestra un error, intente hacer el proyecto (ctrl + F9) / Build> Make Project . .
    1. Si falla la compilación debido a algún error, resuélvalo.
    2. Si la construcción es exitosa, se generará la clase de enlace.

Hack rápido para generar clase de enlace

  • Si su clase de enlace no se genera, cierre el proyecto (Archivo> Cerrar proyecto) y ábralo desde reciente .

Tenga en cuenta que recomiendo cerrar y abrir desde reciente porque lleva menos tiempo que Reconstruir / Reiniciar IDE .

Hack rápido para generar variables de diseño en clase de enlace

  • Si su variable de datos de diseño no se genera, cierre el proyecto (Archivo> Cerrar proyecto) y ábralo desde reciente .

Si aún tienes problemas. Hágamelo saber en los comentarios, o vea esta respuesta para una mejor comprensión.


¿Actualizó su archivo de diseño para el enlace de datos? Se generan solo para diseños que tienen enlace de datos.

Tiene que comenzar con una etiqueta de layout que tiene 2 etiquetas secundarias (datos y su vista raíz).

Algo como esto:

<?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 ... </LinearLayout> </layout>

Cuando su diseño tiene este formulario, AndroidStudio debe completar automáticamente la clase. Además, de forma predeterminada, se genera en el <your.app.package>.databinding .


¿Cuál es su nombre de diseño?

El archivo de diseño anterior era activity_main.xml, por lo que la clase de generación era ActivityMainBinding.

Lo que esto significa es que el nombre de clase generado dependerá del nombre de su diseño

activity_main.xml -> ActivityMainBinding.java

Creo que el nombre de su actividad es "main_activity", por lo que el nombre de la clase de enlace generado debe ser MainActivityBinding, no ActivityMainBinding


Asegúrese de que el diseño de:

<data> <variable name="user" type="com.example.User"/> </data>

Está en activity_main.xml si está buscando ActivityMainBinding. En la mayoría de los proyectos repetitivos, configura su vista de contenido en activity_main.xml, pero luego lo infla fragment_main.xml.

Si coloca su <data> en el diseño fragment_main.xml , la clase que se genera será FragmentMainBinding .

Nota: Esto puede parecer obvio después de leer, pero es algo que puede pasarse por alto fácilmente al seguir la documentación de Android.


Cuando no está generando la clase de enlace, reinicio el estudio de Android. Entonces se generará la clase de enlace. ¿No es causado por el caché de Android Studio?

Por cierto, si está utilizando android-apt , verifíquelo. Porque hará que la clase de enlace no se genere.


En mi caso, acabo de adjuntar mi diseño xml en las etiquetas <layout></layout> y eso es todo, sin agregar la etiqueta de datos, tuve éxito para generar enlaces de datos. Espero que esto ayude.

<data> <variable name="user" type="com.example.User"/> </data>


En mi caso, reiniciar Android Studio funciona. Es un error en android-apt


Enfrenté el mismo problema.

La razón de "no se puede resolver ActivityMainBinding" es que su archivo Binding no se genera. Intenta limpiar y reconstruir el proyecto. También asegúrese de haber seguido los pasos:

  1. classpath "com.android.databinding: dataBinder: 1.0-rc4" -> incluir esto en el archivo de compilación del módulo principal
  2. aplique el complemento: ''com.android.databinding'' al módulo de su aplicación que está creando
  3. Limpiar
  4. Reconstruir. Compruebe debajo, si se genera build-> indermediates-> su nombre de paquete-> carpeta de enlace de datos que contiene la clase ActivityMainBinding.

Alternativamente, si desea ver la fuente generada.

  1. classpath ''com.neenbedankt.gradle.plugins: android-apt: 1.7'' -> se aplica a su módulo principal.
  2. aplique el complemento: ''com.neenbedankt.android-apt'' -> a su módulo de aplicación
  3. apt ''com.android.databinding: compiler: 1.0-rc0'' -> incluir en sus dependencias.

Estas clases se generarán en la primera compilación. También asegúrese de que el ID de la aplicación en su módulo de aplicación sea el mismo que el nombre del paquete en AndroidManifest.xml de su módulo de aplicación. Espero que esto ayude.


Mi experiencia es que Android Studio 3.1.3 generó la clase de enlace de datos después de hacer clic en "Construir> Reconstruir proyecto". El archivo fue almacenado en:

/ Project / app / build / generado / source / apt / development / debug / project / android / app / databinding

Sin embargo, Android Studio aún informó la clase de enlace como "Desconocido" en el código fuente.

Para finalmente solucionarlo, agregué manualmente la declaración de importación :

import project.android.app.databinding. *;


Para que el enlace de datos de Android funcione correctamente, debe usar las herramientas de Android para gradle (com.android.tools.build:gradle)> = 1.3.0.

Entonces su proyecto build.gradle debe verse así:

buildscript { repositories { jcenter() } dependencies { classpath ''com.android.tools.build:gradle:1.3.0'' classpath "com.android.databinding:dataBinder:1.0-rc1" } } allprojects { repositories { jcenter() } }

Y el módulo build.gradle debe tener ese complemento:

apply plugin: ''com.android.databinding''

Después de todo, verifique en su módulo que está usando la última versión de buildTools (ahora es 22.0.1). No estoy seguro de que sea necesario, pero posiblemente te hará sentir bien si estás en la "vanguardia de la tecnología" ^ _ ^:

buildToolsVersion ''22.0.1''

Vuelva a sincronizar gradle y reconstruya su proyecto . Es probable que sin la reconstrucción del proyecto no se SomeLayoutBinding clases SomeLayoutBinding .

En Android Studio, eso se puede hacer desde el menú de la aplicación: Build -> Rebuild project


Si alguna vez quiso dar su propio nombre de clase Binding, simplemente agregue el atributo de class al elemento de data con el nombre de clase

Las clases de enlace se pueden renombrar o colocar en diferentes paquetes ajustando el atributo de clase del elemento de datos.

<data class="ContactItem"> ... </data> <data class="com.example.ContactItem"> ... </data>


Si no desea reiniciar Android Studio, una forma es cambiar el nombre de activity_main.xml a otra cosa, por ejemplo, activity_m.xml y luego cambiarlo de nuevo a activity_main.xml. Es mucho más rápido que reiniciar Android Studio.

Para cambiar el nombre, haga clic derecho en activity_main.xml y elija Refactor => Rename


Solo un simple reinicio no funcionó para mí. Tuve que Invalidate Caches and Restart para poder ver las clases de enlace. Está debajo del menú File para aquellos que no lo saben.


Un extraño "error" en android-studio hace que el archivo BR.java generado no use los campos @Bindable y solo tenga la propiedad _all si no existe un directorio res / layout.

Me sucedió cuando quería crear una aplicación "Sin actividad" para tener una biblioteca que contuviera mis diferentes datos vinculables.


compruebe el nivel de acceso a los campos de su objeto, cuando hice público funcionó aquí


Intente cambiar el nombre del diseño a main_activity.xml .

En mi caso, no funcionó generar la clase de enlace para "activity_main.xml".
Pero cambiar el nombre del archivo de diseño a main_activity.xml funcionó bien.


<data class="MainActivityBinding"> <variable name="user" type="com.example.administrator.my_mvvm.User" /> </data>

// Recuerde que necesita Build-> Rebuild Project