安卓绑定停止工作

8
我的Android绑定突然停止工作了,现在我构建的任何东西都会收到这个消息。
错误:任务“:app:compileDevDebugJavaWithJavac”执行失败。
java.lang.RuntimeException:发现数据绑定错误。 **** /数据绑定错误 ****msg:无法找到属性“android:text”的getter,其值类型为java.lang.String,位于android.widget.EditText上。 文件:C:\ path \ to \ layout \ layout.xml loc:85:12-96:54 **** \数据绑定错误 ****
我尝试过的: 首先,有人建议如果我的文件中存在错误,则绑定将无法编译,因此删除了所有使用绑定的布局文件,直到一个文件layout.xml。在那里我有
 <EditText
       android:layout_width="wrap_content"
       android:layout_height="match_parent"
       android:text="@{model.name}" />

"...它运行良好,但是如果我添加双向绑定android:text="@={model.name}",就会抛出之前的错误。

接下来,我添加了

"
@InverseBindingAdapter(attribute = "android:text")
public static String captureEditTextValue(EditText view) {
    return view.getText().toString();
}

“...然后它会抛出新的错误。
错误:执行任务 ':app:compileDevDebugJavaWithJavac' 失败。

java.lang.RuntimeException:发现数据绑定错误。 ****/ 数据绑定错误 ****msg:在视图类型 'android.widget.EditText' 上找不到事件 'android:textAttrChanged' file:C:\Users\EdgeTech\AndroidStudioProjects\purse\purse-customer\app\src\main\res\layout\get_phone_layout.xml loc:85:12 - 96:54 ****\ 数据绑定错误 ****

进一步进行了重构,变成了这样。


 @InverseBindingAdapter(attribute = "android:text", event = "android:textAttrChanged")
 public static String captureEditTextValue(EditText view) {
        return view.getText().toString();
 }

仍然出现之前的错误。
我的设置:
- Android Studio: 2.3.3 - Gradle Build 工具:2.3.3

当涉及到双向绑定时,如果您的变量是String类型,则android:text="@={model.name}"这行就足够了。如果您有其他数据类型,则需要进行反向绑定。 - Ravi
@RaviRupareliya 是的,它是一个字符串。 - oreofeolurin
那么正如我已经说过的,如果它是“String”,则根本不需要使用“InverseBinding”。 - Ravi
@RaviRupareliya,好的,但是它仍然无法构建。 - oreofeolurin
自从上周五以来,我在Android预览版上遇到了同样的问题。曾经有效的代码,在EditText上进行简单的String绑定时停止工作。标记的答案无法解决它。 - Alex Burdusel
显示剩余2条评论
4个回答

3

双向绑定需要这种类型:

ObservableField<T>

例如: 在viewModel.class中。
public ObservableField<String> productName = new ObservableField<>();

在layout.xml文件中:

<EditText
       android:layout_width="wrap_content"
       android:layout_height="match_parent"
       android:text="@={viewModel.productName}" />

2

您只需要更改:

@InverseBindingAdapter(attribute = "android:text")
public static String captureEditTextValue(EditText view) {
    return view.getText().toString();
}

to:

@InverseBindingAdapter(attribute = "android:text")
public static String getText(TextView view) {
    return view.getText().toString();
}

2

去掉InverseBindingAdapter,因为我认为它对于字符串来说不是必要的。

然后,在您的EditText XML标记中,将android:text="@={model.name}更改为android:text="@={`` + model.name}"


请告诉我这是否解决了您的问题。我看到您正在使用Android 2.3+(修复错误的最低支持版本),因此这个解决方案很可能可以解决问题。 - Randall Arms

1

谢谢,

现在它已经工作了。我将我的构建工具和SDK平台工具升级到版本26后,它开始正常工作了。不过我仍然不确定为什么它会在25版本上出现问题。

我尝试了所有提供的解决方案,但都无济于事,升级是唯一有效的解决方案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接