ListView(RecyclerView)中EditText数据错乱问题

今天做项目碰到一个BUG,一个listview中多个item,每个item中有两个EditText和一个Textview。item很多,Listview可以滑动。
当我在第一个Item中的EditText中输入文本后,来回拉动Listview,就会导致EditText中的值消失,或者到其他的EditText上。
查询之后发现是 Listview复用的问题 。网上的解决方案我试了很多,也许是我自己的问题,并没有根本解决问题。而且相当复杂。看了将近三十篇博文,都是差不多的解决方案。
今天给大家提供一种非常简单的解决方案。自己琢磨半天想到的。

思路:向下拉动ListView 会触发它的复用机制,每次都会调用getView。

这是切入点。所以我把每个Item(view)加入到一个 HashMap<Integer,View>中。
Integer对应的是item的position 。View对应的是ViewHolder 也就是你Item中的所有控件。
结合这些,看一下我的getview() 非常容易的就解决了问题
注意:一定是if(viewHashMap.get(position)==null)在put

@Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        final ViewHolder viewHolder;
        //重点
        if(viewHashMap.get(position)==null){
            viewHolder = new ViewHolder();
            convertView = LayoutInflater.from(mContext).inflate(R.layout.list_style_checkitem,
                    null);
            viewHolder.tvCheckItem = (TextView) convertView.findViewById(R.id.tv_CheckItem);
            viewHolder.etCheckTime = (EditText) convertView.findViewById(R.id.et_CheckTime);
            viewHolder.etCheckData = (EditText) convertView.findViewById(R.id.et_CheckData);
            viewHolder.etRemark = (EditText) convertView.findViewById(R.id.et_Remark);
            viewHashMap.put(position,convertView);
            convertView.setTag(viewHolder);
        }else {
            convertView = viewHashMap.get(position);
            viewHolder = (ViewHolder)convertView.getTag();
        }
        viewHolder.tvCheckItem.setText(mList.get(position));
        return convertView;
    }

我的item中只有一个TextView和两个EditText,所以我的ViewHolder

    public final static class ViewHolder {
        EditText etCheckTime,etCheckData,etRemark;
        TextView tvCheckItem;
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值