tipos resueltos quimicos polar ionicos ionico enlaces enlace ejercicios covalentes covalente como android data-binding android-databinding

android - resueltos - tipos de enlaces covalentes



No se puede resolver la clase de enlace de datos de Android (16)

La clase de vinculación se generará en función de su nombre de archivo de diseño. De forma predeterminada, el nombre de la clase se basa en el nombre del archivo de diseño, convirtiéndolo en el caso de Pascal y agregándole el sufijo de enlace

por ejemplo, si su nombre xml es activity_main.xml, entonces el nombre de la clase DataBinding será ActivityMainBinding

luego importa el paquete:

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

entonces puedes usarlo

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

Al utilizar el enlace de datos, no puedo obtener la clase MainActivityBinding según la Guía de enlace de datos

Mi nombre de diseño es activity_main.xml . También veo Android - Enlace de datos - ¿Cómo y cuándo se generarán las clases de enlace? pero no puede ayudarme.


Compruebe que su xml y clase de actividad / fragmento tienen nombres consistentes; por ejemplo, si tiene TimePickerFragment el nombre del archivo xml debería ser time_picker_fragment .

Se me ocurrió que tenía el diseño llamado fragment_time_picker ; Después de cambiarlo se generó el enlace.


De forma predeterminada, una clase de enlace se genera en función del nombre del archivo de diseño, iniciándolo con mayúsculas, eliminando los guiones bajos (_) y usando mayúsculas en la siguiente letra y luego con el sufijo "Enlace".

Esta clase se colocará en un paquete de enlace de datos bajo el paquete del módulo.

Por ejemplo, el archivo de diseño contact_item.xml generará ContactItemBinding .

Si el paquete del módulo es com.example.my.app , se colocará en com.example.my.app.databinding .

Las clases de vinculación pueden ser renombradas o colocadas en diferentes paquetes ajustando el atributo de clase del elemento de datos. Por ejemplo:

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

Esto genera la clase de enlace como ContactItem en el paquete de enlace de datos en el paquete del módulo. Si la clase debe generarse en un paquete diferente dentro del paquete del módulo, puede tener el prefijo “.” :

MainActivity.java public class MainActivity extends AppCompatActivity { public Item item; ActivityMainBinding binding; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); item = new Item(); item.setChecked(true); item.setName("a"); binding = DataBindingUtil.setContentView(this, R.layout.activity_main); binding.included.secondIncluded.setModel(item); Item.java public class Item extends BaseObservable { private String name; private Boolean checked; @Bindable public String getName() { return this.name; } @Bindable public Boolean getChecked() { return this.checked; } public void setName(String name) { this.name = name; notifyPropertyChanged(BR.name); } public void setChecked(Boolean checked) { this.checked = checked; notifyPropertyChanged(BR.checked); } } activity_main.xml <?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:id="@+id/tv_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="abc" android:textSize="20sp" /> <include android:id="@+id/included" layout="@layout/included_layout" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout> </layout> included_layout.xml <?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:id="@+id/tv_title2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="123" android:textSize="20sp" /> <include android:id="@+id/second_included" layout="@layout/second_included_layout" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout> </layout> second_included_layout.xml <?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> <variable name="model" type="com.example.simone.twowaydatabinding.Item" /> </data> <LinearLayout android:id="@+id/linear_layout_included" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:id="@+id/tv_title1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="xyz" android:textSize="20sp" /> <TextView android:id="@+id/tv_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@={model.name}" android:textSize="20sp" /> <Switch android:id="@+id/switch_test" android:layout_width="wrap_content" android:layout_height="wrap_content" android:checked="@={model.checked}" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="change" android:onClick="button_onClick"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/world"/> </LinearLayout> </layout>

En este caso, ContactItem se genera directamente en el paquete del módulo. Se puede usar cualquier paquete si se proporciona el paquete completo:

1) Rebuild the project after adding the dataBinding in gradle. 2) Rebuild after adding layout tag in xml. 3) cleaning the project 4) rebuilding the project 5) Restarted the Android Studio


En mi caso, BORRAR la carpeta de compilación de la aplicación y luego reconstruir el proyecto resolvió mi problema.

Incluso los siguientes pasos no funcionaron.

import com.domain.my.databinding.MyActivityBinding;

Después de habilitar el enlace de datos en el archivo gradle de la aplicación, reconstrúyalo. Entonces podemos encontrar la clase de vinculación generada.

If the layout name is fragment_home, The Binding class name will be FragmentHomeBinding.


En tales casos, si ni la reconstrucción ni la invalidación funcionan, entonces debe haber un error en uno de sus archivos xml donde puede haber usado @ {xyz.abc} y debe haber un problema con xyz o abc en el xml.


Gracias a todos por su respuesta. Encontré una solución con ContentMainBinding nombre de clase para enlace de datos. Me deja explicar

NOTA: Mientras se usa layout con <include ... aquí está <include layout="@layout/content_main" con funcionalidad de enlace de datos, el nombre de la clase relacionada con el nombre de layout. Aquí está el ContentMainBinding

Mi archivo de diseño son los siguientes:

activity_main.xml

<?xml version="1.0" encoding="utf-8"?> <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" tools:context="com.databindingdemo.app.MainActivity"> ... <include layout="@layout/content_main" /> ... </android.support.design.widget.CoordinatorLayout>

Y content_main.xml es el diseño donde agregué mi código de diseño de enlace de datos.

Entonces, en lugar de usar MainActivityBinding se puede resolver con ContentMainBinding

El código que me funciona a continuación es:

//Code for data binding ContentMainBinding contentMainBinding = DataBindingUtil.setContentView(this, R.layout.content_main); user = new User("Pranay", "Patel", "[email protected]", "9999999999"); contentMainBinding.setUser(user);

HECHO.


He intentado las siguientes soluciones que no funcionaron para mí: 1) Invalidar el caché y reiniciar. 2) Reinicie Android Studio. 3) Reconstruir proyecto.

Lo que DID solucionó el problema es: 1. Eliminar la etiqueta "dataBinding" en el módulo gradle.build 2. Proyecto Sync 3 Devolver la etiqueta "databinding" 4. Volver a sincronizar el proyecto.


He limpiado el proyecto, Rebuild se hizo ... pero fue inútil. Luego invalidé los cachés y reinicié el proyecto que tampoco me ayudó.

Luego cambié mi nombre de archivo xml, que funcionó fantásticamente bien.

Por lo tanto, me gustaría compartir una cosa, cambie el nombre de archivo xml.

Por ejemplo: si su archivo xml es: activity_main.xml y no puede obtener ActivityMainBinding en su clase Java .......... luego cambie el nombre xml a main_activity.xml y luego use MainActivityBinding en su clase java como ''Enlace MainActivityBinding privado''

Esto lo hará muy probablemente.


Intente reiniciar Android Studio o busque manualmente la clase ActivityMainBinding y agregue su importación.

Ponga su etiqueta de datos en su último xml incluido. Aquí hay un ejemplo:

If the layout name is fragment_home, The Binding class name will be FragmentHomeBinding.


La clase de DataBinding se generará en base a su nombre de archivo xml. Está claramente mencionado en el documento que está siguiendo.

De forma predeterminada, una clase de enlace se generará en función del nombre del archivo de diseño, convirtiéndolo en el caso de Pascal y con el sufijo "Enlace" en él. El archivo de diseño anterior era main_activity.xml, por lo que la clase de generación era MainActivityBinding

Si su nombre xml es activity_main.xml , entonces el nombre de la clase DataBinding será ActivityMainBinding .

Si su nombre xml es main_activity.xml , entonces el nombre de la clase DataBinding será MainActivityBinding .

No te olvides de limpiar y construir el proyecto una vez.

Puedes seguir este tutorial para más información sobre DataBinding


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

Consejos para disminuir el tiempo atascado en DataBinding.

Esta respuesta le ayudará a generar una clase de enlace de datos y también a generar variables de diseño en la clase de enlace de datos.

Punto 3-último son muy importantes, así que no te los pierdas.

1. Compruebe si el enlace de datos habilitado

Debe tener el enlace de datos habilitado en build.gradle . Si no es así, agregue esto y sincronice .

import com.companyname.applicationname.databinding.ActivityMainBinding;

2. Comprobar que el diseño se convierte en diseño de enlace

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

ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main); User user = new User("Test", "User"); binding.setUser(user);

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 el nombre de su diseño está en snake case activity_main.xml , la clase de enlace de datos se generará en un caso de camello como ActivityMainBinding .

  • A veces, cuando escribe ActivityMai... , entonces no muestra la sugerencia , en ese caso, importe la clase manualmente.

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

4. Revise los diseños para los errores

Su clase de enlace y nuevas variables en el diseño, no se generarán si su compilación falla. Así que haz un proyecto con Ctrl + F9 (Build> Make project) .

  • Si la compilación falla, vea qué es el 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 la causa.

5. 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
  • Abrir de nuevo desde reciente

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

6. 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 Construir o Crear proyecto ). Se generará su clase de enlace de datos. ( Reconstruir hace magia para mí. )

7. Tener el último estudio de Android

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

Solución para <variables

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

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

1. Cerrar y abrir proyecto de reciente

Si ha creado una <variable en su diseño y no se muestra su configurador y captador en la clase de enlace de datos, intente cerrar el proyecto y abrir desde el reciente.

2. Limpie el proyecto después de cambiar el tipo

Si cambió el tipo de alguna <variable en su diseño y el tipo de configurador de obtención no cambia, entonces Limpie el proyecto ( Build> Clean Project )

Ultimas palabras

Finalmente, si todavía no se genera tu clase de enlace, entonces tenemos nuestra arma más poderosa. - Reiniciar 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 caché y reinicie .

Esto es todo lo que hago para resolver mis errores de enlace de datos. Si tienes algún problema adicional, puedes comentar aquí.

comprueba esta respuesta también


No puedo comentar así que solo añadiré esto en respuesta. Creo que activity_main.xml creará ActivityMainBinding en lugar de MainActivityBinding como usted mencionó. en algunos casos donde studio no puede encontrar la clase de enlace, simplemente invalide los cachés y reconstruya el proyecto.


Reinicie Android studio o intente cambiar el nombre del archivo XML por otro nombre y verifique si el enlace funciona una vez que funciona.


Si el nombre de la clase DataBinding es correcto y solía limpiar y reconstruir el proyecto, pero sigue mostrando un error.
A continuación, intenta reiniciar AndroidStudio


Tuve el mismo problema después de cambiar el nombre del paquete de mi fuente, después de probar muchas cosas (incluidas las que se mencionan aquí), resolví el problema importando la clase de enlace de datos manualmente:

import com.domain.my.databinding.MyActivityBinding;


INTENTE Renombrar el archivo xml con otro nombre y verificar si el enlace funciona una vez que funciona, renómbrelo como el que se usó.

Eso ayudó a Android Studio 3.1