RecycleView里面包含Edittext,当内容改变后,滑动列表,数据错乱的问题解决
核心代码如下:亲测可用
public class ConfirmSignAdapter extends BaseQuickAdapter<ConfirmSignBean, BaseViewHolder> {
public ConfirmSignAdapter(int layoutResId) {
super(layoutResId);
}
@Override
protected void convert(BaseViewHolder helper, ConfirmSignBean item) {
EditText item_editText = helper.getView(R.id.et_confirm_num);
// 通过tag判断当前editText是否已经设置监听,有监听的话,移除监听再给editText赋值
if (item_editText.getTag() instanceof TextWatcher){
item_editText.removeTextChangedListener((TextWatcher) item_editText.getTag());
}
//必须在判断tag后给editText赋值,否则会数据错乱
item_editText.setText(item.getConfirmSignNum());
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 editable) {
if (!TextUtils.isEmpty(editable)) {
item.setConfirmSignNum(editable.toString());
}
}
};
// 给item中的editText设置监听
item_editText.addTextChangedListener(watcher);
// 给editText设置tag,以便于判断当前editText是否已经设置监听
item_editText.setTag(watcher);
helper.setText(R.id.tv_goods_code, item.getGoodsCode())
.setText(R.id.tv_goodname, item.getGoodsName())
.setText(R.id.tv_goods_in_num, item.getGoodsInNum())
.setText(R.id.tv_goods_out_num, item.getGoodsOutNum());
// .setText(R.id.et_confirm_num, item.getGoodsOutNum());
}
}