我尝试在使用Android数据绑定的xml中使用and "&&“运算符,
android:visibility="@{(bean.currentSpaceId == bean.selectedSpaceId **&&** bean.currentSpaceId > 0)? View.VISIBLE: View.GONE}"
但是我得到了编译错误:
错误:执行任务':app:dataBindingProcessLayoutsDevDebug‘失败。file:/Users/path/app/build/intermediates/res/merged/dev/debug/layout/fragment_space.xml;:org.xml.sax.SAXParseException;systemId: systemId lineNumber: 106;columnNumber: 89;实体名称必须紧跟在实体引用中的'&‘后面。
和android studio中的红色高亮错误:未转义或未终止字符。
那么我该如何解决这个问题呢?
编辑:找到了答案,需要对这些字符进行转义:
'&' --> '&'
'<' --> '<'
'>' --> '>'
发布于 2016-05-11 12:11:01
应将&&
呈现为&&
。
官方data binding guide提供了使用这些XML实体的比较运算符示例,例如
android:visibility="@{age < 13 ? View.GONE : View.VISIBLE}"
编辑
我在答案中提到的示例表达式从文档的英文版本中消失了,因为这个答案是写出来的。它们确实在一些过时的非英语版本的文档中幸存下来,比如西班牙语版本。
无论哪种方式,最初的答案仍然有效,因为在XML中使用XML实体是XML的标准,与Android本身无关。
发布于 2018-07-31 19:54:13
HTML实体列表
您不能在XML中使用&或其他。所以你必须使用转义字符。
android:text="@{(1==1 && 2>0) ? `true` : `false`}"
Android常用的字符实体:
+--------+----------------------------+--+--+--+
| Symbol | Equivalent HTML Entity | | | |
+--------+----------------------------+--+--+--+
| > | > | | | |
+--------+----------------------------+--+--+--+
| < | < | | | |
+--------+----------------------------+--+--+--+
| " | ", “ or ” | | | |
+--------+----------------------------+--+--+--+
| ' | ', ‘ or ’ | | | |
+--------+----------------------------+--+--+--+
| } | } | | | |
+--------+----------------------------+--+--+--+
| & | & | | | |
+--------+----------------------------+--+--+--+
| space |   | | | |
+--------+----------------------------+--+--+--+
是一个完整的HTML实体列表。
发布于 2016-09-30 18:04:15
在布局标记中转义&&是一个非常糟糕的解决方案。最好是在(视图)模型对象上创建一个方法:
android:visibility="@{user.adult ? View.VISIBLE : View.GONE}"
public boolean isAdult() {
return age >= 18;
}
https://stackoverflow.com/questions/37152824
复制相似问题