双向绑定无法为 java.lang.String 属性 解析 setter
Two-way binding cannot resolve a setter for java.lang.String property
我正在玩 Android Studio 2.1 AFIK 中引入的数据绑定 API 的双向绑定。
我收到这个有趣的错误:
Error:Execution failed for task ':app:compileDebugJavaWithJavac'.
> java.lang.RuntimeException: Found data binding errors.
****/ data binding error ****msg:The expression address.street cannot cannot be inverted: Two-way binding cannot resolve a setter for java.lang.String property 'street'
file:/path/to/layout.xml
loc:34:37 - 34:50
****\ data binding error ****
当我尝试 google 那个错误时,我刚发现一个 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()
的 return 值。
我的想法是定义它,但这对我不起作用:
@NonNull
@InverseBindingAdapter(attribute = "text")
public static String getText(EditText edit) {
return edit.getText().toString();
}
我错过了什么?
这个 bug 丑得要命,而且确实是数据绑定中的一个 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
根据数据绑定官方回购 https://android.googlesource.com/platform/frameworks/data-binding/ 提交消息,此错误已在 Android Studio 2.2 预览版 3 中修复。
如果您使用的是 kotlin ,请确保将用于双向绑定的数据 class 字段声明为 var。如果是val不支持双向绑定
我正在玩 Android Studio 2.1 AFIK 中引入的数据绑定 API 的双向绑定。
我收到这个有趣的错误:
Error:Execution failed for task ':app:compileDebugJavaWithJavac'.
> java.lang.RuntimeException: Found data binding errors.
****/ data binding error ****msg:The expression address.street cannot cannot be inverted: Two-way binding cannot resolve a setter for java.lang.String property 'street'
file:/path/to/layout.xml
loc:34:37 - 34:50 ****\ data binding error ****
当我尝试 google 那个错误时,我刚发现一个 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()
的 return 值。
我的想法是定义它,但这对我不起作用:
@NonNull
@InverseBindingAdapter(attribute = "text")
public static String getText(EditText edit) {
return edit.getText().toString();
}
我错过了什么?
这个 bug 丑得要命,而且确实是数据绑定中的一个 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
根据数据绑定官方回购 https://android.googlesource.com/platform/frameworks/data-binding/ 提交消息,此错误已在 Android Studio 2.2 预览版 3 中修复。
如果您使用的是 kotlin ,请确保将用于双向绑定的数据 class 字段声明为 var。如果是val不支持双向绑定