Попытка установить видимость с View
помощью пользовательских переменных, но возникает ошибка: Identifiers must have user defined types from the XML file. visible is missing it
. Можно ли настроить видимость просмотра с помощью привязки данных? Спасибо.
<data>
<variable
name="sale"
type="java.lang.Boolean"/>
</data>
<FrameLayout android:visibility="@{sale ? visible : gone}"/>
android
android-databinding
Константин Конопко
источник
источник
Ответы:
Как указано в Руководстве разработчика Android , делать это нужно следующим образом:
<data> <import type="android.view.View"/> <variable name="sale" type="java.lang.Boolean"/> </data> <FrameLayout android:visibility="@{sale ? View.GONE : View.VISIBLE}"/>
источник
В вашем макете:
<data> <variable name="viewModel" type="...."/> </data> <View android:layout_width="10dp" android:layout_height="10dp" android:visibility="@{viewModel.saleVisibility, default=gone}"/>
В вашем Java-коде ViewModel:
@Bindable public int getSaleVisibility(){ return mSaleIndecator ? VISIBLE : GONE; }
источник
@Bindable
. Когда я включил это, я получал разные ошибки привязки, включая предложение о продленииBaseObservable
. Хороший указатель здесьLiveData<Boolean>
?Проблема заключается в том, что
visibility
находитесь вInteger
наView
классе, это означает , что есть два пути , чтобы сделать эту работу:View.VISIBLE
иView.GONE
константы. https://developer.android.com/topic/libraries/data-binding/index.html#importsvisibility
которого требуется файлBoolean
. https://developer.android.com/topic/libraries/data-binding/index.html#custom_settersВозможная реализация:
@BindingAdapter("android:visibility") public static void setVisibility(View view, Boolean value) { view.setVisibility(value ? View.VISIBLE : View.GONE); }
Что заставит
<FrameLayout android:visibility="@{sale}"/>
работать.источник