Tratar de establecer la visibilidad del View
uso de variable personalizada, sino que se produce el error: Identifiers must have user defined types from the XML file. visible is missing it
. ¿Es posible configurar la visibilidad de la vista mediante el enlace de datos? Gracias.
<data>
<variable
name="sale"
type="java.lang.Boolean"/>
</data>
<FrameLayout android:visibility="@{sale ? visible : gone}"/>
android
android-databinding
Konstantin Konopko
fuente
fuente
Respuestas:
Como se indica en la Guía para desarrolladores de Android , debe hacerlo así:
<data> <import type="android.view.View"/> <variable name="sale" type="java.lang.Boolean"/> </data> <FrameLayout android:visibility="@{sale ? View.GONE : View.VISIBLE}"/>
fuente
En tu diseño:
<data> <variable name="viewModel" type="...."/> </data> <View android:layout_width="10dp" android:layout_height="10dp" android:visibility="@{viewModel.saleVisibility, default=gone}"/>
En su código Java de ViewModel:
@Bindable public int getSaleVisibility(){ return mSaleIndecator ? VISIBLE : GONE; }
fuente
@Bindable
. Cuando incluí eso, recibía diferentes errores vinculantes, incluida la sugerencia para extenderBaseObservable
. Buen puntero aquíLiveData<Boolean>
?El problema es que
visibility
estáInteger
en laView
clase, esto significa que tiene dos formas de hacer que esto funcione:View.VISIBLE
yView.GONE
. https://developer.android.com/topic/libraries/data-binding/index.html#importsvisibility
eso requiere unBoolean
. https://developer.android.com/topic/libraries/data-binding/index.html#custom_settersPosible implementación:
@BindingAdapter("android:visibility") public static void setVisibility(View view, Boolean value) { view.setVisibility(value ? View.VISIBLE : View.GONE); }
Lo que hará que
<FrameLayout android:visibility="@{sale}"/>
funcione.fuente