首页 > 解决方案 > 如何将提示属性转换为 ViewModel 中的观察项

问题描述

我正在学习如何使用 MVVM 进行开发。我创建了一个小示例,我想观察提示属性发生的更改,以便每次更改提示时都应调用 VM“ViewModel”类中的相应回调。

根据下面发布的代码,当我将绑定添加到提示属性时,我收到下面发布的错误。

请让我知道如何将提示属性转换为可观察的,以便我可以观察到编辑文本提示发生的任何变化。

xml

        android:id="@+id/actMain_LoginViewModel1_et_userId"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@{(chars)->LoginViewModel1.onHintChanged(chars)}"
        android:afterTextChanged="@{(editable)->LoginViewModel1.onAfterUserIdChanged(editable)}"

错误

Found data binding errors.
****/ data binding error ****msg:Cannot find the proper callback class for android:hint. Tried java.lang.CharSequence but it has 4 abstract methods, should have 1 abstract methods.
file:C:\AndroidProjects\DesignPattern\MVVM_02\app\src\main\res\layout\act_main.xml
loc:22:28 - 22:72
****\ data binding error ****

标签: androidmvvm

解决方案


我想我找到了我的问题的答案。setHint 既不是匿名类也不是接口,不像 TextChanged 之后的那样。因此,与它的绑定应该是一个返回值的回调。我将 onHintChanged 的​​签名修改为如下所示。

答案

    public String onHintChanged() {
    Log.d(TAG, "onHintChanged chars: ");
    return "hint changed";
    }

    android:id="@+id/actMain_LoginViewModel1_et_userId"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="@{LoginViewModel1.onHintChanged()}"

android:afterTextChanged="@{(editable)->LoginViewModel1.onAfterUserIdChanged(editable)}"

推荐阅读