Android-DataBinding - ¿Cómo y cuándo se generarán las clases de enlace?


DataBinding Guide Establece

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

Author: sowmia, 2015-07-12

18 answers

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

El archivo de diseño anterior era activity_main.xml por lo que la clase generate era ActivityMainBinding.

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

activity_main.xml - > ActivityMainBinding.java

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

 65
Author: Mao,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-12 13:10:24

Cuando no está generando la clase de enlace, reinicio Android studio. Luego se generará la clase de enlace. ¿No es causada por la caché de Android Studio?

Por cierto, si está utilizando android-apt, por favor compruébelo. Porque causará que la clase de enlace no se genere.

 31
Author: Frank Cheng,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-12 13:38:20

¿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 layout que tiene 2 etiquetas secundarias (data & your root view).

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, por defecto, se genera en el paquete <your.app.package>.databinding.

 23
Author: yigit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-25 04:52:03

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

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

 12
Author: surlac,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-16 18:00:16

Asegúrese de que el diseño de la:

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

Está en el activity_main.xml si está buscando ActivityMainBinding. En la mayoría de los proyectos repetitivos, establece su vista de contenido en activity_main.xml, pero luego inflar fragment_main.XML.

Si pones tu <data> en fragment_main.xml layout entonces la clase que se genera será FragmentMainBinding.

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

 4
Author: CodyF,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-29 14:56:05

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

 3
Author: user3871754,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-06 09:56:32

Si alguna vez ha querido dar su propio nombre de clase vinculante, simplemente agregue el atributo class al elemento data con el nombre de clase

Las clases de enlace pueden renombrarse o colocarse en paquetes diferentes ajustando el atributo class del elemento de datos.

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

<data class="com.example.ContactItem">
...
</data>
 3
Author: Bharatesh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-24 08:53:00

Para que Android databinding funcione correctamente, debes usar las herramientas de Android para gradle (com.androide.herramienta.build: gradle) > = 1.3.0.

Así que tu proyecto se construye.gradle debe tener el siguiente aspecto:

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 compilación de módulos.gradle debe tener ese plugin:

apply plugin: 'com.android.databinding'

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

buildToolsVersion '22.0.1'

Vuelve a sincronizar gradle y reconstruye tu proyecto. Es probable que sin la reconstrucción del proyecto no se generen las clases SomeLayoutBinding.

En Android Studio que se podría hacer desde el menú de la aplicación: Build -> Rebuild project

 1
Author: Клаус Шварц,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-15 14:29:59

Se enfrentó al mismo problema.

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

  1. classpath " com.androide.databinding: DataBinder: 1.0-rc4 " include > incluir esto en módulo principal archivo de compilación
  2. aplicar plugin: 'com.androide.databinding ' a su módulo de aplicación que está construyendo
  3. Limpio
  4. Reconstruir. Comprobar en, si se genera la carpeta build->indermediates->your package name->databinding que contiene la clase ActivityMainBinding.

Alternativamente si desea ver la fuente generada.

  1. classpath ' com.neenbedankt.gradle.complementos: android-apt:1.7' -->aplicar a su módulo principal.
  2. aplicar plugin: 'com.neenbedankt.android-apt ' module > to you app module
  3. apt ' com.androide.databinding: compiler: 1.0-rc0 ' include > include in your dependencia.

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

 1
Author: ashish bulchandani,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-26 10:18:25

Mi experiencia es que Android Studio 3.1.3 generó la clase databinding después de hacer clic en "Build > Rebuild Project". El archivo fue almacenado en:

\ Project \ app \ build \ generated \ source \ apt \ development \ debug \ project \ android \ app \ databinding

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

Para finalmente arreglarlo, yo manualmente agregué la instrucción import :

Importar proyecto.androide.app.databinding.*;

 1
Author: Someone Somewhere,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-31 10:22:10

Un simple reinicio no funcionó para mí. Tuve que Invalidate Caches and Restart entonces pude ver las clases de enlace. Está bajo el menú File para aquellos que no saben.

 1
Author: IsaiahJ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-30 08:53:17

Un extraño "error" en android-studio causa el BR generado.java file no debe usar los campos @Bindable y todavía solo tiene la propiedad _all si no existe un directorio res/layout.

Me sucedió cuando quise crear una aplicación "Sin actividad" para tener una biblioteca que contuviera mis diferentes datos enlazables.

 0
Author: Aurélien Lemaitre,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-07 19:21:43

En mi caso acabo de incluir mi xml de diseño en 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>
 0
Author: Qasim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-08 12:08:18
<data class="MainActivityBinding">
    <variable
        name="user"
        type="com.example.administrator.my_mvvm.User" />
</data>

/ / Recuerde la necesidad Build - > Rebuild Project

 0
Author: a442509097,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-15 15:29:46

Compruebe el nivel de acceso de los campos de su objeto, cuando me volví público funcionó aquí

 0
Author: Kleyton Santos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-31 19:05:11

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 cámbialo 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 elegir Refactor => Cambiar el nombre

 0
Author: tick t,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-21 08:39:13

1) Para habilitar el enlace de datos, agregue el siguiente código en el archivo gradle de nivel de módulo.(Module:app)

android {    
    ...
    dataBinding {
        enabled = true
    }

}

Las versiones anteriores del compilador de enlace de datos generaban el enlace clases en el mismo paso que compila su código administrado. Si su el código administrado no se compila, es posible que obtenga informes de varios errores que las clases de enlace no se encuentran. El nuevo compilador de enlace de datos evita estos errores al generar las clases de enlace antes de compilador administrado construye su app.

(2) Para habilitar el nuevo compilador de enlace de datos, agrega la siguiente opción a tu gradle.archivo de propiedades:

android.databinding.enableV2=true

Funciona para mí...

 0
Author: Samir Mangroliya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-25 12:38:57

Regla

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

Si su nombre de diseño es activity_home.xml, entonces el nombre de la clase vinculante be ActivityHomeBinding.class.

Problema

  1. Muchas veces no recibe sugerencia 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. Las clases de enlace no están disponibles cuando falla la compilación

Aquí está hack

Cuando no recibe Sugerencia de importación

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

    import <yourpackage>databinding.ActivityMainBinding;
    

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

  • Si su línea de importación muestra un error, intente make project (ctrl + F9) / Build> Make Project. .
    1. Si la compilación falla debido a algún error, entonces resuélvala.
    2. Si build es exitoso y luego se generará la clase binding.

Truco rápido para generar la clase de enlace -

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

Tenga en cuenta que recomiendo cerrar y abrir a partir de la reciente porque toma menos tiempo de Reconstruir / Reiniciar el IDE.

Truco rápido para generar variables de diseño en clase vinculante -

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

Si todavía tiene problemas. Déjame saber en comentarios, o ver esta respuesta para una mejor comprensión.

 0
Author: Khemraj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-10-03 07:55:44