Cómo vincular el diseño con varios calificadores

Tengo 2 diseños: uno para v19 + y otro para versiones anteriores. Contienen diferentes vistas con diferentes ids. ¿Cómo puedo decir Android Framework de DataBinding que quiero trabajar con ambos diseños? Genera vistas sólo para un diseño (selecciona aleatoriamente).

Layout / temp_view.xml:

<layout 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"> <data> <variable name="block" type="ru.temp.model.content.blocks.WebMediaBlock" /> <import type="ru.temp.model.Types.ProviderTypes" /> </data> <FrameLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" tools:background="@android:color/white"> <ImageView android:id="@+id/provider" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:paddingTop="@dimen/size5" android:src="@{ProviderTypes.fromString(block.provider).getResId()}" /> </FrameLayout> </layout> 

Layout-v19 / temp_view.xml:

 <layout 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"> <data> <variable name="block" type="ru.temp.model.content.blocks.WebMediaBlock" /> <import type="ru.temp.model.Types.ProviderTypes" /> </data> <FrameLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" tools:background="@android:color/white"> <ru.temp.utils.EmbedView android:id="@+id/media_embed" android:layout_width="match_parent" android:layout_height="wrap_content" /> <ru.temp.structure.static_material.CreditsView android:id="@+id/credits_view" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </FrameLayout> </layout> 

Actualizar:

Finalmente he descubierto la raíz del problema. No sé porqué pero no genera archivos * BindingImpl cuando uso minSdkVersion 21. Si especifica versiones anteriores funciona como dijo @yigit

El enlace de datos generará una clase base que servirá como una interfaz común para ambas (las variables). El enlace de datos se encargará de crear la instancia correcta cuando se llame a DataBindingUtil.setContentView(activity, R.layout.tmp_view ).

Por ejemplo, en su ejemplo, generará

TempViewBinding , TempViewBindingImpl y TempViewBindingV19Impl . Puede comprobar estas clases dentro de <app module>/build/intermediates/classes/<your package>/databinding/ después de compilar.

TempViewBinding es la clase base y tendrá la combinación de variables y vistas para cada diseño. Si no los está viendo en el IDE, podría ser un error de autocompletado en AS (por favor, archive un error).

  • Enlace de datos: enlaza método único de escucha con múltiples métodos
  • Android: la etiqueta de vista no es correcta en la vista: null (CursorAdapter y DataBinding)
  • Android - DataBinding - ¿Cómo y cuándo se generarán las clases de enlace?
  • Vinculación de datos de Android mediante etiqueta de inclusión
  • No se puede encontrar el GETTER para el atributo 'app: vm' con el tipo de valor Boolean
  • ¿Cómo usar com.android.databinding en el módulo (estudio de Android)?
  • Ejemplo de enlace de datos de 2 vías de android no funcionan como se describe
  • Enlace de datos de Android: 'No se encontró identificador de recurso para el atributo'
  • Enlaces de datos con oyentes personalizados en la vista personalizada
  • Cómo vincular un layout_width y layout_height mediante el enlace de datos en Android
  • Cómo combinar componentes de arquitectura con vinculación de datos en android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.