El enlace de datos de Android no funciona con los atributos <merge>

Estoy tratando de usar databinding con vistas personalizadas (un posible uso George Mount mostrado aquí ).

No se puede imaginar construir vistas compuestas sin etiqueta <merge> . Sin embargo, en esta situación falla la conexión de datos:

Clase MyCompoundView :

 public class MyCompoundView extends RelativeLayout { MyCompoundViewBinding binding; public MyCompoundView (Context context, AttributeSet attrs) { super(context, attrs); init(context); } private void init(Context context){ LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); binding = MyCompoundViewBinding.inflate(inflater, this, true); } 

my_compound_view.xml : por app:isGone="@{!data.isViewVisible}" esperaba controlar la visibilidad de toda la vista compuesta

 <?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" > <data> <variable name="data" type="com.example.MyViewModel"/> </data> <merge android:layout_width="wrap_content" android:layout_height="wrap_content" app:isGone="@{!data.isViewVisible}"> <ImageView android:id="@+id/image_image" android:layout_width="60dp" android:layout_height="60dp" app:imageUrl="@{data.imagePhotoUrl}"/> <!-- tons of other views--> </merge> </layout> 

Los errores del compilador:

 Error:(13) No resource identifier found for attribute 'isGone' in package 'com.example' Error:(17, 21) No resource type specified (at 'isGone' with value '@{!data.isViewVisible}'). 

Tengo todos los métodos @BindingAdapter necesarios. Ahora FrameLayout la vista de FrameLayout y uso <RelativeLayout> lugar de <merge> – y funciona. Pero tengo un diseño anidado adicional.

Pregunta: merge attrs se ignoran. ¿Hay alguna manera de solucionar eso?

Android Studio 1.5.1 estable

Gradle plugin com.android.tools.build:gradle:1.5.0

One Solution collect form web for “El enlace de datos de Android no funciona con los atributos <merge>”

No hay ningún objeto de combinación después de la inflación, por lo que no hay nada para asignar valores a con una etiqueta de mezcla. No puedo pensar en ninguna etiqueta de enlace que funcione en la fusión.

Puede asignar la etiqueta al elemento raíz y utilizar BindingAdapter para hacer lo que quiera.

 <layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" > <data> <variable name="data" type="com.example.MyViewModel"/> </data> <merge android:layout_width="wrap_content" android:layout_height="wrap_content"> <ImageView app:isGone="@{!data.isViewVisible}" android:id="@+id/image_image" android:layout_width="60dp" android:layout_height="60dp" app:imageUrl="@{data.imagePhotoUrl}"/> <!-- tons of other views--> </merge> </layout> 

Si desea hacer algo con la clase Binding en sí, puede utilizar DataBindingUtil para encontrar el objeto desde la vista.

 @BindingAdapter("isGone") public static void setGone(View view, boolean isGone) { ViewDataBinding binding = DataBindingUtil.findBinding(view); //... do what you want with the binding. } 
  • La vinculación de datos de Android hace que la aplicación se bloquee cuando se utiliza una etiqueta de inclusión en un grupo de usuarios no root
  • Enlace de datos: enlaza método único de escucha con múltiples métodos
  • Android databinding - Cómo obtener dimensiones desde dimens.xml
  • Android Data Binding: no puede encontrar el setter para el atributo
  • Vinculación de datos de Android mediante etiqueta de inclusión
  • Kotlin y conexión de datos de Android
  • Spinner enlace de datos de 2 vías
  • Problema con enlace de datos usando Kotlin para Android
  • La vinculación de datos de Android produce "Carpetas de origen generadas en una ubicación incorrecta"
  • Edittext cursor restablecer a la izquierda después de la actualización de datos de datos de Android
  • Error de DataBinding de Android. No se pudo encontrar el complemento
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.