Ich versuche, den Operator und "&&" in XML mithilfe der Android-Datenbindung zu verwenden.
android:visibility="@{(bean.currentSpaceId == bean.selectedSpaceId **&&** bean.currentSpaceId > 0)? View.VISIBLE: View.GONE}"
aber ich habe den Kompilierungsfehler bekommen:
Fehler: Ausführung für Task ': app: dataBindingProcessLayoutsDevDebug' fehlgeschlagen. org.xml.sax.SAXParseException; systemId: file: /Users/path/app/build/intermediates/res/merged/dev/debug/layout/fragment_space.xml; lineNumber: 106; columnNumber: 89; Der Entitätsname muss unmittelbar auf das '&' in der Entitätsreferenz folgen.
und rote Markierung Fehler in Android Studio "unescaped & oder nicht terminierte Zeichen".
Wie soll ich das beheben?
Bearbeiten: fand die Antwort, diese Zeichen müssen maskiert werden:
'&' --> '&'
'<' --> '<'
'>' --> '>'
quelle
Antworten:
&&
sollte als gerendert werden&&
.Der offizielle Leitfaden zur Datenbindung enthält Beispiele für Vergleichsoperatoren, bei denen diese XML-Entitäten beispielsweise verwendet werden
Bearbeiten
Die Beispielausdrücke, die ich in der Antwort erwähnt habe, sind aus der englischen Version der Dokumente verschwunden, da diese Antwort geschrieben wurde. Sie überleben in einigen veralteten nicht-englischen Versionen der Dokumente wie der spanischen Version.
In beiden Fällen ist die ursprüngliche Antwort weiterhin gültig, da die Verwendung von XML-Entitäten in XML in XML Standard ist und nichts mit Android selbst zu tun hat.
quelle
Liste der HTML-Entitäten
Sie können & oder eine andere HTML-Entität in XML nicht verwenden. Sie müssen also einen Escape-Charakter verwenden.
In Android häufig verwendete HTML-Zeichenentitäten:
Hier ist eine vollständige Liste der HTML-Entitäten.
quelle
Das Entkommen von && im Layout-Markup ist eine sehr schlechte Lösung. Es ist besser, eine Methode für das (Ansichts-) Modellobjekt zu erstellen:
quelle
ObservableBoolean isAdult
Die beste Lösung, die ich für dieses Problem finden konnte, war die Einführung einer neuen bindbaren Methode.
Vor:
item_recyclerview.xml
::MyDataModelClass
: (was in meinem Ansichtsmodell gehalten wird)Nach dem:
item_recyclerview.xml
::MyDataModelClass
: (was in meinem Ansichtsmodell gehalten wird)quelle