tutorial studio espaƱol ejemplo edittext databinding data android android-databinding

android - studio - data binding vs butterknife



Utilizar enlace de datos para establecer la visibilidad de la vista (3)

Como se indica en la Guía del desarrollador de Android , debes hacerlo así:

<data> <import type="android.view.View"/> <variable name="sale" type="java.lang.Boolean"/> </data> <FrameLayout android:visibility="@{sale ? View.GONE : View.VISIBLE}"/>

Esta pregunta ya tiene una respuesta aquí:

Intentando establecer la visibilidad de la View usando una variable personalizada, pero se produce un error: los Identifiers must have user defined types from the XML file. visible is missing it Identifiers must have user defined types from the XML file. visible is missing it . ¿Es posible establecer 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}"/>


El problema es que la visibility es un Integer en la clase View , esto significa que tiene dos formas de hacer que esto funcione:

  1. Use las constantes View.VISIBLE y View.GONE . https://developer.android.com/topic/libraries/data-binding/index.html#imports
  2. Definir un configurador personalizado para la visibility que toma un Boolean . https://developer.android.com/topic/libraries/data-binding/index.html#custom_setters

Posible 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.


En su 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; }