RecyclerView EditText 数据错乱问题

本文介绍了一种解决Android应用中EditText与Adapter数据同步的方法。当使用notifyDataSetChanged更新列表时,若直接修改bean类会导致数据错乱。文章提供了一段代码示例,展示了如何在移除TextWatcher监听器后更新EditText的值,并重新添加监听器,以确保数据的一致性和正确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因为之前用第三方封装好的适配器 一般情况下也没发现有问题,但是目前也碰到了这个问题  。按照通常方法如果你调用了notifyDataSetChanged

你直接Textwatcher里面直接修改bean类还是没有用,因为系统会重新绘制。所以导致数据错乱 通过查询一下网友的解决方法  我也试了一下 我发现我通过一个网友所提供的方法解决了 直接贴代码:


//完整代码
       if (holder instanceof EditTextItemHolder) {
            //1、为了避免TextWatcher在第2步被调用,提前将他移除。
            if (((EditTextItemHolder) holder).et_text.getTag() instanceof TextWatcher) {
                ((EditTextItemHolder) holder).et_text.removeTextChangedListener((TextWatcher) (((EditTextItemHolder) holder).et_text.getTag()));
            }


            // 第2步:移除TextWatcher之后,设置EditText的Text。 
            ((EditTextItemHolder) holder).et_text.setText(bean.getValue());




            TextWatcher watcher = new TextWatcher() {
                @Override
                public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
                }


                @Override
                public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
                }


                @Override
                public void afterTextChanged(Editable editable) {
                    if (TextUtils.isEmpty(editable.toString())) {
                        bean.setValue("");
                    } else {
                        bean.setValue(editable.toString());
                    }
                }
            };
            ((EditTextItemHolder) holder).et_text.addTextChangedListener(watcher);
            ((EditTextItemHolder) holder).et_text.setTag(watcher);
        }


作者:david_zhw
链接:http://www.jianshu.com/p/bd805630b45b

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值