Android数据绑定使用“&&”逻辑运算符

我正尝试使用Android数据绑定在xml中使用“&&”运算符,

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工作室“非转义&或非终止字符”。

那么我该如何解决这个问题呢?

编辑:find答案,这些人物需要逃脱:

'&' – >'&'

'<' – >'&lt;

'>' – >'&gt';

&&应呈现为&amp;&amp;

例如,官方的数据绑定指南中使用了这些XML实体的比较运算符的例子

 android:visibility="@{age &lt; 13 ? View.GONE : View.VISIBLE}" 

在布局标记中转义&&是一个非常糟糕的解决scheme。 在(视图)模型对象上创build一个方法最好:

 android:visibility="@{user.adult ? View.VISIBLE : View.GONE}" public boolean isAdult() { return age >= 18; } 

我可以为这个问题提出的最佳解决scheme是引入一个新的Bindable方法。

之前:

item_recyclerview.xml

 <EditText ... android:enabled="@{myViewModel.myDataModelClass.lastAddedItem &amp;&amp; !myViewModel.myDataModelClass.editTextDisabled}" /> 

MyDataModelClass :(这是在我的viewmodel举行)

 ... private boolean lastAddedItem; private boolean editTextDisabled; ... @Bindable public boolean isLastAddedItem() { return lastAddedItem; } public void setLastAddedItem(boolean lastAddedItem) { this.lastAddeditem = lastAddedItem; notifyPropertyChanged(BR.lastAddedItem); } @Bindable public boolean isEditTextDisabled() { return editTextDisabled; } public void setEditTextDisabled(boolean editTextDisabled) { this.editTextDisabled = editTextDisabled; notifyPropertyChanged(BR.editTextDisabled); } 

后:

item_recyclerview.xml

 <EditText ... android:enabled="@{myViewModel.myDataModelClass.enableEditing}" /> 

MyDataModelClass :(这是在我的viewmodel举行)

 ... private boolean lastAddedItem; private boolean editTextDisabled; ... @Bindable public boolean isLastAddedItem() { return lastAddedItem; } public void setLastAddedItem(boolean lastAddedItem) { this.lastAddeditem = lastAddedItem; notifyPropertyChanged(BR.lastAddedItem); notifyPropertyChanged(BR.isEnableEditing); } @Bindable public boolean isEditTextDisabled() { return editTextDisabled; } public void setEditTextDisabled(boolean editTextDisabled) { this.editTextDisabled = editTextDisabled; notifyPropertyChanged(BR.editTextDisabled); notifyPropertyChanged(BR.isEnableEditing); } @Bindable public boolean isEnableEditing() { return isLastAddedItem() && !isEditTextDisabled(); }