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:
-
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ñofragment_abc2.xml
, inmediatamente obtuve el objeto de enlace de datos generado .java / .class. -
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 comoActivityMainBinding
.
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