Estoy tratando de usar el operador y "&&" en xml usando el enlace de datos de Android,
android:visibility="@{(bean.currentSpaceId == bean.selectedSpaceId **&&** bean.currentSpaceId > 0)? View.VISIBLE: View.GONE}"
pero recibí el error de compilación:
Error: Falló la ejecución de la tarea ': aplicación: dataBindingProcessLayoutsDevDebug'. org.xml.sax.SAXParseException; systemId: archivo: /Users/path/app/build/intermediates/res/merged/dev/debug/layout/fragment_space.xml; número de línea: 106; columnNumber: 89; El nombre de la entidad debe seguir inmediatamente el '&' en la referencia de la entidad.
y error de resaltado en rojo en el estudio de Android "personaje sin escape y / o sin terminar".
Entonces, ¿cómo debo solucionar esto?
Editar: encontró la respuesta, estos personajes deben escaparse:
'&' --> '&'
'<' --> '<'
'>' --> '>'
fuente
Respuestas:
&&
debe presentarse como&&
.La guía oficial de enlace de datos tiene ejemplos de operadores de comparación donde se utilizan estas entidades XML, por ejemplo
Editar
Las expresiones de ejemplo que mencioné en la respuesta desaparecieron de la versión en inglés de los documentos ya que esta respuesta fue escrita. Sobreviven en algunas versiones obsoletas de los documentos que no están en inglés, como la versión en español.
De cualquier manera, la respuesta original sigue siendo válida, porque el uso de entidades XML en XML es estándar en XML y no tiene nada que ver con el propio Android.
fuente
Lista de entidades HTML
No puede usar & o alguna otra entidad HTML en XML. Entonces tienes que usar el carácter de escape.
Entidades de caracteres HTML de uso frecuente en Android:
Aquí hay una lista completa de entidades HTML.
fuente
Escapar && en el marcado de diseño es una solución muy pobre. Es mejor crear un método en el objeto del modelo (ver):
fuente
ObservableBoolean isAdult
La mejor solución que pude encontrar para este problema fue introducir un nuevo método Bindable.
Antes de:
item_recyclerview.xml
:MyDataModelClass
: (que se lleva a cabo en mi modelo de vista)Después:
item_recyclerview.xml
:MyDataModelClass
: (que se lleva a cabo en mi modelo de vista)fuente