问题描述
我用addTextChangedListener从服务器与改型搜索项。但只有Android版本10 onTextChanged算不工作...?
这是我的代码
searchEdit.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s,int start,int count,int after) {
}
@Override
public void onTextChanged(CharSequence s,int before,int count) {
if (count>1) {
String name = searchEdit.getText().toString().trim();
if (!name.isEmpty()) {
searchItemByName(name);
}
}
}
@Override
public void afterTextChanged(Editable s) {
}
});
解决方法
我假设您在 count
回调中使用 onTextChanged
参数作为 searchEdit
Edittext 中的字符数。
解决方案:
您需要使用 s.length()
函数而不是参数 count
,如下所示:
searchEdit.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s,int start,int count,int after) {
}
@Override
public void onTextChanged(CharSequence s,int before,int count) {
if (s.length()>1) {
String name = searchEdit.getText().toString().trim();
if (!name.isEmpty()) {
searchItemByName(name);
}
}
}
@Override
public void afterTextChanged(Editable s) {
}
});
说明:
如果您查看以下 android.text.TextWatcher::onTextChanged
函数的文档:
/**
* This method is called to notify you that,within <code>s</code>,* the <code>count</code> characters beginning at <code>start</code>
* have just replaced old text that had length <code>before</code>.
* It is an error to attempt to make changes to <code>s</code> from
* this callback.
*/
public void onTextChanged(CharSequence s,int count);
它说 count
参数指的是 s
中更改的字符数,因此,如果您在编辑文本中输入,您的 onTextChanged
函数将使用参数调用count
为 1。
或者:您可以将 afterTextChanged
回调与 s.length()
一起使用。