Java 如何在Android xml中正确添加TextChangeListener
我也尝试过这样做: 因此,我有xml格式的EditText:Java 如何在Android xml中正确添加TextChangeListener,java,android,android-databinding,Java,Android,Android Databinding,我也尝试过这样做: 因此,我有xml格式的EditText: <?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <data> <import type="test.edu
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<import type="test.edu.MyViewModel"/>
<variable type="MyViewModel" name="viewModel"/>
</data>
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
(...)
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:addTextChangeListener="@{viewModel.myTextWatcher}"/>
(...)
我认为我已经完成了与上述链接中相同的操作,但当我尝试编译时,我得到:
在android.widget.EditText上找不到参数类型为android.text.TextWatcher的属性“app:addTextChangeListener”的setter
你能给我一些提示,看看这里出了什么问题吗?我假设我提到的代码正在编译,但我不是100%确定。您可以这样尝试:
EditText editText =(EditText)findViewById(R.id.editText1);
editText.addTextChangeListener(new TextWatcher(){
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {}
@Override
public void afterTextChanged(Editable editable) {}
};
我没有把它写在你的
xml
文件中,而是最终解决了这个问题。。。那只是个打字错误。我没有使用addTextChanged监听器,而是使用addTextChange监听器,老实说,错误消息并没有太大帮助。现在,当我知道解决方案时,这是显而易见的,但之前我检查了“app”名称空间、一些@Bind注释、gradle选项等等。也许只有我一个人,但我认为如果出现以下错误,会容易得多:
android.widget.EditText没有函数addTextChangeListener
我知道,但因为我使用的是MVVM,所以我想避免在ViewModel中使用findViewById。根据谷歌的说法:“ViewModel的唯一职责是管理UI的数据。它永远不应该访问您的视图层次结构(…)”,最好用XML设置UI元素
EditText editText =(EditText)findViewById(R.id.editText1);
editText.addTextChangeListener(new TextWatcher(){
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {}
@Override
public void afterTextChanged(Editable editable) {}
};