有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    我试图重现这个问题,而您出现这个错误的原因是,您试图使用三元表达式的双向数据绑定

    android:visibility="@={chart.ShowProgress ? View.VISIBLE : View.GONE}"
    

    这是看到此错误的正常行为,因为双向数据绑定的目的不仅是将值从java映射到XML布局,而且还将它们从XML映射回java中的存储。因此,根据您的表达式,您希望将布尔值chart.ShowProgress映射到某个小部件的可见性;但是,如何将XML映射回java(如何使用这个三元表达式chart.ShowProgress ? View.VISIBLE : View.GONE将小部件的可见性映射回java)。答案是,使用双向数据绑定无法做到这一点,这就是引发此异常的原因

    因此,要解决您的问题,您需要从表达式中删除等号,因此它应该是:

    android:visibility="@{chart.ShowProgress ? View.VISIBLE : View.GONE}"