原因是因为setText方法中调用sendAfterTextChanged((Editable) text);导致的,所以需要先移除监听器,在setText之后设置监听器。 具体步骤、代码: //1.判断EditText.getTag()获取标签是否为TextWatcher //2.移除监听文本监听器 //3.EditText.setText设置输入框文本 //4.添加监听文本内容改变监听器和EditText.setTag设置标签
//1.判断EditText.getTag()获取标签是否为TextWatcher,
if (holder.etRealNum.getTag() instanceof TextWatcher) {
//2.移除监听文本监听器
holder.etRealNum.removeTextChangedListener((TextWatcher) holder.etRealNum.getTag());
}
//3.EditText.setText设置输入框文本
holder.etRealNum.setText(info.getRealNum());
TextWatcher watcher = 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) {
if (mClickListener != null) {
String number = editable.toString();
mClickListener.onItemClick(position, number);
}
}
};
//4.添加监听文本监听器和EditText.setTag设置标签
holder.etRealNum.addTextChangedListener(watcher);
holder.etRealNum.setTag(watcher);
分析如下:
TextView中的setText代码:
@UnsupportedAppUsage
private void setText(CharSequence text, BufferType type,
boolean notifyBefore, int oldlen) {
mTextSetFromXmlOrResourceId = false;
if (text == null) {
text = "";
}
// If suggestions are not enabled, remove the suggestion spans from the text
if (!isSuggestionsEnabled()) {
text = removeSuggestionSpans(text);
}