美文网首页android 集结号
RecyclerView 子项item中含有EdiTtext复用

RecyclerView 子项item中含有EdiTtext复用

作者: ana生 | 来源:发表于2017-12-15 10:36 被阅读1299次

最近在项目中有个需求,一个列表,每个item里面都含有一个Edittext,好,简单,手撸了一个recyclerview,然后测试了下,发现没问题,过2天,测试那边反馈一系列问题,都是围绕EditText复用展开的问题,于是我又耐心了debug了下,发现,数据少,不会有问题,但是数据一多,严重的复用问题就出来了,例:在第一个item的Edittext中输入一个数字,往下拉,再往上。。。。数据全乱了,没有的也有了。第一想到的就是recyclerview的复用问题,针对这个问题,现提出如下2种解决方案,根据自己的需求来选择,或者有更好的解决方法欢迎留言。

1.强制的停用Recyclerview的复用

在onbindViewholder中:

 holder.setIsRecyclable(false);

此方法适合数据量不宜过大的用户,不然会出现卡卡的现象,具体效果,可以自己体验。

2.通过view的setTag()方法解决Recyclerview的复用

if (etMoney.getTag() instanceof TextWatcher) {
        etMoney.removeTextChangedListener((TextWatcher) etMoney.getTag());
    }
    etMoney.setText(lottery.getBetMoney());
    TextWatcher textWatcher = new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            if (s.length() > 0) {
                lottery.setBetMoney(s.toString());
            } else {
                lottery.setBetMoney("");
            }
            if (listener != null) {
                listener.onTextChange(position);
            }
        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    };
    etMoney.addTextChangedListener(textWatcher);
    etMoney.setTag(textWatcher);

以上提供的2种方法都能解决问题,有更好的方案记得留言反馈哦!谢谢!

相关文章

网友评论

    本文标题:RecyclerView 子项item中含有EdiTtext复用

    本文链接:https://www.haomeiwen.com/subject/ajprwxtx.html