当ListView条目往上移动时,会回收重复利用,有可能使编辑框中内容丢失或错乱,解决办法:
1.条目复用时,若果当前EditText已经添加TextWatcher监听,先将它移除,否则数据错乱
if (viewHolder.mEditText.getTag() instanceof TextWatcher) { viewHolder.mEditText.removeTextChangedListener((TextWatcher) (viewHolder.mEditText.getTag())); }
2.数据保存,和显示,建议用一个类保存数据(也就是给adapter传进来的数据),当adapter初始化时,将数据刷新显示
TextWatcher mWatcher = new EnrollmentTextWatcher() { @Override public void afterTextChanged(Editable s) { if (TextUtils.isEmpty(s)) { userInfo.setMajorRelation(null); } else { userInfo.setMajorRelation(String.valueOf(s)); } } };
3.添加监听 TextWatcher
//添加监听,作用:保存数据 viewHolder.mEditText.addTextChangedListener(mWatcher); //添加标记 viewHolder.mEditText.setTag(mWatcher);