我正在使用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.zip
是String
。我猜这里的问题是CharSequence
与String
作为EditText.getText()
的返回值。
我的想法是定义它,但这对我不起作用:
@NonNull
@InverseBindingAdapter(attribute = "text")
public static String getText(EditText edit) {
return edit.getText().toString();
}
我错过了什么?
答案 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中修复。