RecyclerView布局item中使用EditText,在刷新的时候,造成了数据的错乱

Posted zhang106209

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RecyclerView布局item中使用EditText,在刷新的时候,造成了数据的错乱相关的知识,希望对你有一定的参考价值。

1. 造成的原因:

item的复用,在适配器刷新的时候,EditText中Textwatcher被重复调用的问题,由于调用了notifyDataSetChanged()方法,而导致EditText重绘, 并且每次都走了textWatcher的afterTextChanged()方法.导致EditText中的内容发生了错乱的现象.

2. 解决办法:

方法一:强制停用Recyclerview的复用

holder.setIsRecyclable(false);//防止editText数据错乱

方法二:先删除一遍,可以通过设置tag的方式

        //先移除监听
        if (holder.editText.getTag() instanceof TextWatcher) 
            holder.editText.removeTextChangedListener((TextWatcher) holder.originTv.getTag());
            holder.editText.clearFocus()
        
        holder.editText("");//移除后设置数据
        TextWatcher watcher = 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) 

            

            @Override
            public void afterTextChanged(Editable s) 
                if (holder.editText.hasFocus()) 
                    //写你editText的数据改变逻辑

                
            
        ;
        //重新添加
        holder.editText.addTextChangedListener(watcher);
        //设置tag
        holder.editText.setTag(watcher);

方法一不推荐使用

以上是关于RecyclerView布局item中使用EditText,在刷新的时候,造成了数据的错乱的主要内容,如果未能解决你的问题,请参考以下文章

RecyclerView中 item进行放大动画被父布局覆盖

RecyclerView实现多种item布局-----学习

RecyclerView添加多个样式不同的Item布局

RecyclerView布局item中使用EditText,在刷新的时候,造成了数据的错乱

RecyclerView布局item中使用EditText,在刷新的时候,造成了数据的错乱

android RecyclerView GridLayoutManager 多布局(每个Item带标题)