ListView中多个EditText获取值错乱的问题
class MyTextWeatcher implements TextWatcher{
ViewHolder viewHolder;
public MyTextWeatcher(ViewHolder viewHolder){
this.viewHolder = viewHolder;
}
@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 s) {
int pos = (int) viewHolder1.editText.getTag();
if(s != null && !TextUtils.isEmpty(s.toString()) && pos == index) {
int count = 0;
try {
count = Integer.parseInt(s.toString());
} catch (NumberFormatException e) {
e.printStackTrace();
} finally {
mDatas[(int) viewHolder.editText.getTag()].setCount(count);
Log.i("@@@", "position===" + position + "===" + count);
}
}
}
- 定义成员变量index用来记录当前获取到焦点的EditText
viewholder.etitText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(hasFocus){
index = position;
}
}
});
- 在convertView==null创建ViewHolder时创建MyTextWeatch,并赋值给ViewHolder,添加EditText输入监听中
viewholder.textWeatcher = new MyTextWeatcher(viewholder)
viewholder.et_inspectionPointName.addTextChangedListener(viewholder.textWeatcher)
- 在ContentView != null时,通过ViewHolder获取到当前MyTextWeatcher,如果其不为空,则删除其监听并重新创建并添加
MyTextWeatcher textWeatcher = viewholder.textWeatcher
if(null != textWeatcher) { viewholder.editText.removeTextChangedListener(textWeatcher)
}
viewholder.editText.setTag(position)
viewholder.textWeatcher = new MyTextWeatcher(viewholder)
viewholder.editText.addTextChangedListener(viewholder.textWeatcher)
- 这样可以保证监听唯一性,有问题欢迎大家指正(感觉总是删除创建比较浪费)