android - 如何将提示属性转换为 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 ****
解决方案
我想我找到了我的问题的答案。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)}"
推荐阅读
- php - 从节点服务器解码 Php 中的 JWT 令牌
- r - r 时间序列的频率可以大于一年吗?
- python - 如何将 cv2 / Pillow-modified 图像写入磁盘?
- java - 使用 JsonView 选择性地隐藏字段
- data-structures - 在给定一阶关系的情况下合并两个堆
- javafx - 如何一键链接各种 MouseEvent?
- python - 如何仅提取 1985-2018 年运行的时间序列的 7 月(txt 文件)
- flutter - Flutter 中的 htmlspecialchars_decode(stripslashes())
- r - 列只能是数字或字母数字值 R
- python - holoviews hv.save x 标签截止(修剪)