关于RecyclerView中存在EditText控件,导致数据错乱问题
RecylerView中包含EditText,数据错乱问题处理
·
我们都知道,如果在RecyclerView中包含EditText控件的时候,不做处理会导致数据错乱问题。
原因:
由于ViewHolder的复用机制导致
解决办法:
1、在ViewHolder中初始化TextWacher
public static class MyViewHolder extends BaseViewHolder {
private ExampleBean bean;
// 用于防止TextWatcher递归调用
private TextWatcher watcher1, watcher2;
private Callback callback;
public MyViewHolder(@NonNull ViewDataBinding binding) {
super(binding);
setupTextWatchers();
}
public void bind(ExampleBean bean) {
this.bean = bean;
setTextWithoutTrigger(binding.etProject, bean.getPartsName(), watcher1);
setTextWithoutTrigger(binding.etCount, bean.getPartsNum(), watcher2);
}
private void setupTextWatchers() {
watcher1 = 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 (null != bean) {
//这里可以做数据设置操作
}
}
};
watcher2 = 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 (null != bean) {
//这里可以做数据设置操作
}
}
};
}
private void setTextWithoutTrigger(EditText editText, String text, TextWatcher watcher) {
if (null != watcher) {
editText.removeTextChangedListener(watcher);
}
editText.setText(text);
if (null != watcher) {
editText.addTextChangedListener(watcher);
}
}
}
2、在adapter中使用:
@Override
public void onBindViewHolder(@NonNull AdvanceFeeInfoVh holder, int position) {
holder.bind(mDatas.get(position));
}
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)