Привязка данных android с использованием логического оператора «&&»

Я пытаюсь использовать оператор & && в xml с помощью привязки данных Android,

android:visibility="@{(bean.currentSpaceId == bean.selectedSpaceId **&&** bean.currentSpaceId > 0)? View.VISIBLE: View.GONE}"

Но я получил ошибку компиляции:

Ошибка: выполнение выполнено для задачи: app: dataBindingProcessLayoutsDevDebug. org.xml.sax.SAXParseException; SystemId: файл: /Users/path/app/build/intermediates/res/merged/dev/debug/layout/fragment_space.xml; LineNumber: 106; ColumnNumber: 89; Имя объекта должно немедленно следовать за символом «&» в ссылке на объект.

И красная ошибка выделения в андроид-студии «unescaped / or non terminated character».

Итак, как я должен это исправить?

Изменить: нашел ответ, этот символ должен быть экранирован:

'&' -> '& amp';

'<' -> '& lt;;

'>' -> '& gt;;

Solutions Collecting From Web of "Привязка данных android с использованием логического оператора «&&»"

&& должен отображаться как &amp;&amp; ,

В официальном руководстве по привязке данных приведены примеры операторов сравнения, в которых используются эти XML-объекты, например

 android:visibility="@{age &lt; 13 ? View.GONE : View.VISIBLE}" 

Escaping && в разметке макета – очень плохое решение. Лучше создать метод для объекта (вида) модели:

 android:visibility="@{user.adult ? View.VISIBLE : View.GONE}" public boolean isAdult() { return age >= 18; } 

Лучшим решением для этой проблемы явилось внедрение нового метода Bindable.

До:

item_recyclerview.xml :

 <EditText ... android:enabled="@{myViewModel.myDataModelClass.lastAddedItem &amp;&amp; !myViewModel.myDataModelClass.editTextDisabled}" /> 

MyDataModelClass : (который хранится в моей модели просмотра)

 ... private boolean lastAddedItem; private boolean editTextDisabled; ... @Bindable public boolean isLastAddedItem() { return lastAddedItem; } public void setLastAddedItem(boolean lastAddedItem) { this.lastAddeditem = lastAddedItem; notifyPropertyChanged(BR.lastAddedItem); } @Bindable public boolean isEditTextDisabled() { return editTextDisabled; } public void setEditTextDisabled(boolean editTextDisabled) { this.editTextDisabled = editTextDisabled; notifyPropertyChanged(BR.editTextDisabled); } 

После:

item_recyclerview.xml :

 <EditText ... android:enabled="@{myViewModel.myDataModelClass.enableEditing}" /> 

MyDataModelClass : (который хранится в моей модели просмотра)

 ... private boolean lastAddedItem; private boolean editTextDisabled; ... @Bindable public boolean isLastAddedItem() { return lastAddedItem; } public void setLastAddedItem(boolean lastAddedItem) { this.lastAddeditem = lastAddedItem; notifyPropertyChanged(BR.lastAddedItem); notifyPropertyChanged(BR.isEnableEditing); } @Bindable public boolean isEditTextDisabled() { return editTextDisabled; } public void setEditTextDisabled(boolean editTextDisabled) { this.editTextDisabled = editTextDisabled; notifyPropertyChanged(BR.editTextDisabled); notifyPropertyChanged(BR.isEnableEditing); } @Bindable public boolean isEnableEditing() { return isLastAddedItem() && !isEditTextDisabled(); }