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());
}
}