[英]Attempt to do a two way binding results in "cannot be inverted error"
嗨,我正在尝试进行双向绑定。 我试图在 XML 文件中绑定的属性是。
android: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) ? (android.view.View.VISIBLE) :
(android.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:
android.databinding.tool.writer.KCode@18e15570
请有人指出我做错了什么吗? 谢谢!
我试图重现这个问题,你得到这个错误的原因是你试图使用带有三元表达式的双向数据绑定。
android:visibility="@={chart.ShowProgress ? View.VISIBLE : View.GONE}"
这是看到此错误的正常行为,因为双向数据绑定不仅旨在将值从 java 映射到 XML 布局,还将它们从 XML 映射回它们在 java 中的存储。 因此,根据您的表达式,您希望将布尔值chart.ShowProgress
的值chart.ShowProgress
到某个小部件的可见性; 但是如何将 XML 映射回 java(如何使用此三元表达式chart.ShowProgress ? View.VISIBLE : View.GONE
将小部件的可见性映射回 java chart.ShowProgress ? View.VISIBLE : View.GONE
.. 答案你不能用双向数据绑定,这就是引发此异常的原因。
所以要解决你的问题,你需要从表达式中删除等号,所以它应该是:
android:visibility="@{chart.ShowProgress ? View.VISIBLE : View.GONE}"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.