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中使用EditText,在刷新的时候,造成了数据的错乱