8

我正在使用 Android Studio 2.1 AFIK 中引入的数据绑定 API 的双向绑定。

我得到这个有趣的错误:

错误:任务“:app:compileDebugJavaWithJavac”执行失败。
> java.lang.RuntimeException:发现数据绑定错误。
****/ 数据绑定错误 ****msg: The expression address.street cannot be inverted: two-way binding cannot resolve a setter for java.lang.String property 'street'
file:/path/to/layout .xml
位置:34:37 - 34:50 ****\ 数据绑定错误 ****

当我尝试用谷歌搜索该错误时,我发现一个 4 天前的日本 Twitter 帖子来自一个为此哭泣的人......

<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="@string/edit_hint_zip"
    android:text="@={address.zip}"
    tools:text="12345"/>

address.zip是一个String. 我猜这里的问题是CharSequencevs.String的返回值EditText.getText()

我的想法是定义它,但这对我不起作用:

@NonNull
@InverseBindingAdapter(attribute = "text")
public static String getText(EditText edit) {
    return edit.getText().toString();
}

我错过了什么?

4

3 回答 3

32

如果您正在使用 kotlin ,请确保用于双向绑定的数据类字段声明为 var。如果是val无法支持双向绑定

于 2019-08-30T14:29:00.067 回答
9

这个错误非常丑陋,并且是数据绑定 API 中的错误。解决方案是生成一个 setter和一个getter。我很快想到了创建一个 setter 的想法,而不是创建一个 getter。

这是我的简化模型:

public class Address {
    public String street;

    public void setStreet(String street) {
        this.street = street;
    }

    public String getStreet() {
        return street;
    }
}

正如您可能注意到的,getter 和 setter 是无用的,但对于双向绑定是必需的。

如果您认为这是 API 的错误,请为我的错误报告加注星标:双向绑定需要 setter 和 ALSO getter

于 2016-04-30T20:54:58.747 回答
0

根据数据绑定官方 repo https://android.googlesource.com/platform/frameworks/data-binding/提交消息,此错误已在 Android Studio 2.2 preview 3 中修复。

于 2016-06-16T09:04:01.577 回答