我正在学习如何使用 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/