Tentando definir a visibilidade de View
usar variável personalizada, mas o erro ocorre: Identifiers must have user defined types from the XML file. visible is missing it
. É possível definir a visibilidade da vista usando vinculação de dados? Obrigado.
<data>
<variable
name="sale"
type="java.lang.Boolean"/>
</data>
<FrameLayout android:visibility="@{sale ? visible : gone}"/>
android
android-databinding
Konstantin Konopko
fonte
fonte
Respostas:
Conforme declarado no Guia do desenvolvedor Android , você precisa fazer assim:
<data> <import type="android.view.View"/> <variable name="sale" type="java.lang.Boolean"/> </data> <FrameLayout android:visibility="@{sale ? View.GONE : View.VISIBLE}"/>
fonte
Em seu layout:
<data> <variable name="viewModel" type="...."/> </data> <View android:layout_width="10dp" android:layout_height="10dp" android:visibility="@{viewModel.saleVisibility, default=gone}"/>
Em seu código Java ViewModel:
@Bindable public int getSaleVisibility(){ return mSaleIndecator ? VISIBLE : GONE; }
fonte
@Bindable
. Quando incluí isso, recebia vários erros de ligação, incluindo sugestões de extensãoBaseObservable
. Boa indicação aquiLiveData<Boolean>
?O problema é que
visibility
é umInteger
naView
classe, isso significa que você tem duas maneiras de fazer isso funcionar:View.VISIBLE
eView.GONE
. https://developer.android.com/topic/libraries/data-binding/index.html#importsvisibility
que leve aBoolean
. https://developer.android.com/topic/libraries/data-binding/index.html#custom_settersImplementação possível:
@BindingAdapter("android:visibility") public static void setVisibility(View view, Boolean value) { view.setVisibility(value ? View.VISIBLE : View.GONE); }
O que dará certo
<FrameLayout android:visibility="@{sale}"/>
.fonte