java尝试进行双向绑定会导致“无法反转错误”
嗨,我想做一个双向绑定。我试图在XML文件中绑定到的属性是
安卓:visibility="@={chart.ShowProgress ? View.VISIBLE : View.GONE}"
在文件ChartViewModel文件中:
private int mShowProgress = View.GONE;
public int getShowProgress() {
if (mColor.colorId == mColorId) {
return mShowProgress;
}
mShowProgress = View.GONE;
return mShowProgress;
}
public void setShowProgress(@NonNull int isProgressVisible) {
this.mShowProgress = isProgressVisible;
}
然而,当我尝试构建时,我得到了一个错误
The expression '((chartShowProgress) ? (安卓.view.View.VISIBLE) :
(安卓.view.View.GONE))' cannot be inverted, so it cannot be used in a two-way binding
Details: The condition of a ternary operator must be constant:
安卓.databinding.tool.writer.KCode@18e15570
有人能指出我做错了什么吗?谢谢
# 1 楼答案
我试图重现这个问题,而您出现这个错误的原因是,您试图使用三元表达式的双向数据绑定
这是看到此错误的正常行为,因为双向数据绑定的目的不仅是将值从java映射到XML布局,而且还将它们从XML映射回java中的存储。因此,根据您的表达式,您希望将布尔值
chart.ShowProgress
映射到某个小部件的可见性;但是,如何将XML映射回java(如何使用这个三元表达式chart.ShowProgress ? View.VISIBLE : View.GONE
将小部件的可见性映射回java)。答案是,使用双向数据绑定无法做到这一点,这就是引发此异常的原因因此,要解决您的问题,您需要从表达式中删除等号,因此它应该是: