双向绑定无法解析java.lang.String属性

时间:2016-04-30 19:24:07

标签: android android-databinding two-way

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

我收到了这个有趣的错误:

  

错误:任务':app:compileDebugJavaWithJavac'执行失败   > java.lang.RuntimeException:发现数据绑定错误   **** /数据绑定错误**** msg:表达式address.street不能反转:双向绑定无法解析java.lang.String属性'street'的setter
  文件:/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.zipString。我猜这里的问题是CharSequenceString作为EditText.getText()的返回值。

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

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

我错过了什么?

3 个答案:

答案 0 :(得分:10)

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

答案 1 :(得分:6)

这个bug很丑陋,而且数据绑定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的错误,请在我的错误报告中加注:Two-way binding required setters AND ALSO getters

答案 2 :(得分:0)

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