Estou tentando usar o operador "&&" no xml usando a ligação de dados do Android,
android:visibility="@{(bean.currentSpaceId == bean.selectedSpaceId **&&** bean.currentSpaceId > 0)? View.VISIBLE: View.GONE}"
mas recebi o erro de compilação:
Erro: falha na execução da tarefa ': 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; O nome da entidade deve seguir imediatamente o '&' na referência da entidade.
e erro de destaque vermelho no android studio "caractere sem escape e / ou não encerrado".
Então, como devo corrigir isso?
Edit: encontrou a resposta, este caractere precisa ser escapado:
'&' --> '&'
'<' --> '<'
'>' --> '>'
android
android-databinding
bindable
David Cheung
fonte
fonte
Respostas:
&&
deve ser renderizado como&&
.O guia oficial de ligação de dados possui exemplos de operadores de comparação nos quais essas entidades XML são usadas, por exemplo
Editar
As expressões de exemplo que eu mencionei na resposta desapareceram da versão em inglês dos documentos desde que essa resposta foi escrita. Eles sobrevivem em algumas versões desatualizadas dos documentos, em inglês, como a versão em espanhol.
De qualquer forma, a resposta original ainda é válida, porque o uso de entidades XML em XML é padrão em XML e não tem nada a ver com o próprio Android.
fonte
Lista de entidades HTML
Você não pode usar & ou alguma outra entidade HTML em XML. Então você tem que usar caracteres de escape.
Entidades de caracteres HTML frequentemente usadas no Android:
Aqui está uma lista completa de entidades HTML.
fonte
Escapar && na marcação do layout é uma solução muito ruim. É melhor criar um método no objeto de modelo (de exibição):
fonte
ObservableBoolean isAdult
A melhor solução que eu consegui encontrar para esse problema foi a introdução de um novo método Bindable.
Antes:
item_recyclerview.xml
:MyDataModelClass
: (que está sendo realizado no meu viewmodel)Depois de:
item_recyclerview.xml
:MyDataModelClass
: (que está sendo realizado no meu viewmodel)fonte