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 )
这样可以保证监听唯一性,有问题欢迎大家指正(感觉总是删除创建比较浪费)