今天花了一天时间解决了一个很恶心的问题。
当listview嵌套editText,并且每一个editText都监听了setOnFocusChangeListener,当listview滑动的时候,会不断调用TextWatcher的回调方法,导致edittext的显示数据不断被刷新。
首先来看看原先的代码:
@Override
public View getView(inti, View convertView, ViewGroup viewGroup) {
.....
EditText editText =(EditText)view.findViewById(R.id.quantity);
editText.addTextChangedListener(newTextWatcher() {
.......
@Override
publicvoidafterTextChanged(Editables) {
//业务逻辑
}
return view;
}
造成afterTextChanged反复调用的原因是,listview在滑动的时候,每一个edittext的addTextChangedListener都会被按顺序被调用,并且无论你是否重用viewholder,这个现象都会出现。