android - 如何将提示属性转换为 ViewModel 中的观察项

标签 android mvvm

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

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

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

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 ****

最佳答案

我想我找到了问题的答案。与 TextChanged 不同,setHint 既不是匿名类也不是接口(interface)。因此,对它的绑定(bind)应该是一个返回值的回调。我将 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)}"

关于android - 如何将提示属性转换为 ViewModel 中的观察项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54026043/

相关文章:

android - 在 android 中使用 TableLayout 的具有固定静态标题的可滚动行

android - 通过 linux 命令在 android 上使用 Ffmpeg

c# - 如何在 MVVM 中的不同 View 之间同步(模型)数据

wpf - 如何在此示例代码中找到 Button 的 DataContext?

c# - ComboBox遗失的项目

c# - 具有 MVVM 数据绑定(bind)的 session /事务管理 NHibernate

java - android - 菜单项未显示在操作栏中

android - 我的 Android 手机未显示在 Dalvik 调试监视器中

Android 模拟器的窗口位置不正确

android - 点击事件在MVVM架构中的位置