问题:Listview 的item 中editview ,监听editview 的文本变化,设置item中的信息,设置addTextChangedListener, 会发现每个item的监听都被触发,发现每个item项中的editText显示数据都一样,在调用notifyDataSetChanged 后,adapter中数据全部都变成一样的。
原因:listview的缓存机制
解决:
一、不使用复用viewholder;
二、在getView()方法中添加文本监听改变的标识符boolean textChanged = true,首先为editView添加输入监听
@Override public void afterTextChanged(Editable s) { if (!ischange) { mList.get(position).setSuggestPrice(s.toString()); } }
其次:
ischange = true; etProductPrice.setText(mList.get(position).getSuggestPrice()); ischange = false;
在调用notifyDataSetChanged的时候,之后etProductPrice.setText(mList.get(position).getSuggestPrice());会立即执行afterTextChanged(Editable s)方法