Я пытаюсь использовать оператор и "&&" в xml, используя привязку данных Android,
android:visibility="@{(bean.currentSpaceId == bean.selectedSpaceId **&&** bean.currentSpaceId > 0)? View.VISIBLE: View.GONE}"
но я получил ошибку компиляции:
Ошибка: не удалось выполнить задачу ': app: dataBindingProcessLayoutsDevDebug'. org.xml.sax.SAXParseException; systemId: file: /Users/path/app/build/intermediates/res/merged/dev/debug/layout/fragment_space.xml; lineNumber: 106; columnNumber: 89; Имя объекта должно сразу следовать за символом "&" в ссылке на объект.
и красная ошибка выделения в студии Android «неэкранированный и или не завершенный символ».
Так как мне это исправить?
Изменить: нашел ответ, нужно экранировать этот символ:
'&' --> '&'
'<' --> '<'
'>' --> '>'
android
android-databinding
bindable
Дэвид Чунг
источник
источник
Ответы:
&&
должен отображаться как&&
.В официальном руководстве по привязке данных есть примеры операторов сравнения, в которых используются эти XML-сущности, например
редактировать
Примеры выражений, которые я упомянул в ответе, исчезли из английской версии документов, так как этот ответ был написан. Они действительно сохранились в некоторых устаревших неанглоязычных версиях документов, например в испанской.
В любом случае исходный ответ по-прежнему действителен, поскольку использование сущностей XML в XML является стандартом для XML и не имеет ничего общего с самим Android.
источник
Список объектов HTML
Вы не можете использовать & или какой-либо другой объект HTML в XML. Итак, вам нужно использовать экранирующий символ.
Сущности символов HTML, часто используемые в Android:
Вот полный список объектов HTML.
источник
Экранирование && в разметке макета - очень плохое решение. Лучше создать метод на объекте модели (view):
источник
ObservableBoolean isAdult
Лучшее решение, которое я мог придумать для этой проблемы, - это введение нового метода Bindable.
Перед:
item_recyclerview.xml
:MyDataModelClass
: (который проводится в моей модели просмотра)После:
item_recyclerview.xml
:MyDataModelClass
: (который проводится в моей модели просмотра)источник