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:
- Spinner enlace de datos de 2 vías
- No puede encontrar el símbolo BR en vinculación de datos de Android
- Error de DataBinding de Android. No se pudo encontrar el complemento
- Kotlin y conexión de datos de Android
- Uso de enlace de datos en error android: package *. *. Databinding no existe
<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
- Vinculación de datos de Android - Referencia para ver
- Android: ¿Variable vinculante y pasando para incluir trabajo de diseño de etiquetas?
- Data Binding Android - El parámetro de tipo T tiene límites superiores incompatibles: ViewDataBinding y MainActivity
- 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
- Android Databinding: el paquete no existe
- El enlace de datos de Android no funciona con los atributos <merge>
- Obtener una clase vinculante desde vista
- Problema con enlace de datos usando Kotlin para Android
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).
- Cómo manejar el mensaje de error "FontFamily bestFont == NULL, así que vuelva FakedFont vacante"
- ¿Cómo puedo reiniciar un servicio en android programatically?