ListView中多个EditText获取值错乱的问题

ListView中多个EditText获取值错乱的问题


  • 定义TextWeatcher监听
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);
  • 这样可以保证监听唯一性,有问题欢迎大家指正(感觉总是删除创建比较浪费)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值