Próbuję użyć operatora and „&&” w xml przy użyciu wiązania danych Androida,
android:visibility="@{(bean.currentSpaceId == bean.selectedSpaceId **&&** bean.currentSpaceId > 0)? View.VISIBLE: View.GONE}"
ale dostałem błąd kompilacji:
Błąd: nie powiodło się wykonanie zadania „: 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; Nazwa jednostki musi znajdować się bezpośrednio po znaku „&” w odniesieniu do jednostki.
i czerwony błąd podświetlenia w Android Studio „znak niezakończony i lub niezakończony”.
Więc jak mam to naprawić?
Edycja: znalazłem odpowiedź, tę postać należy uciec:
'&' --> '&'
'<' --> '<'
'>' --> '>'
android
android-databinding
bindable
David Cheung
źródło
źródło
Odpowiedzi:
&&
powinien być renderowany jako&&
.Oficjalny przewodnik po wiązaniu danych zawiera przykłady operatorów porównania, w których są używane na przykład te jednostki XML
Edytować
Przykładowe wyrażenia, o których wspomniałem w odpowiedzi, zniknęły z angielskiej wersji dokumentacji od czasu napisania tej odpowiedzi. Przetrwają w niektórych przestarzałych nieanglojęzycznych wersjach dokumentów, takich jak wersja hiszpańska.
Tak czy inaczej, oryginalna odpowiedź jest nadal ważna, ponieważ użycie jednostek XML w XML jest standardem w XML i nie ma nic wspólnego z samym Androidem.
źródło
Lista encji HTML
Nie możesz używać & ani innej jednostki HTML w XML. Musisz więc użyć uciekającego znaku.
Jednostki znaków HTML często używane w systemie Android:
Oto pełna lista encji HTML.
źródło
Unikanie znaku && w znaczniku układu jest bardzo kiepskim rozwiązaniem. Lepiej jest utworzyć metodę na obiekcie modelu (widok):
źródło
ObservableBoolean isAdult
Najlepszym rozwiązaniem, jakie mogłem wymyślić dla tego problemu, było wprowadzenie nowej metody Bindable.
Przed:
item_recyclerview.xml
:MyDataModelClass
: (który jest przechowywany w moim modelu widoku)Po:
item_recyclerview.xml
:MyDataModelClass
: (który jest przechowywany w moim modelu widoku)źródło