界面布局与上图类似,在RecyclerView的listitem里面有EditText,并且是可输入的,输入数字之后界面需要实时同步刷新。在开发界面的时候发现,EditText由于RecyclerView的复用会导致数据错乱的情况,解决办法有两种:
第一种:
关闭RecyclerView的复用,这种办法只适合RecyclerView的listitem项目很少的情况,因为项目一旦增多,可能出现滑动很卡顿的问题。
具体做法为在onCreateViewHolder里面调用holder.setIsRecyclable(false);
第二种:
if (holder.numTxt.getTag() != null && holder.numTxt.getTag() instanceof TextWatcher) {
holder.numTxt.removeTextChangedListener((TextWatcher) holder.numTxt.getTag());
}
holder.numTxt.setText(productCount == 0 ? "0" : String.valueOf(productCount));
TextWatcher textWatcher = 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) {
String str = s.toString();
if (!TextUtils.isEmpty(str)){
mList.get(position).setProductCount(Integer.parseInt(str));
}
}
};
holder.numTxt.addTextChangedListener(textWatcher);
holder.numTxt.setTag(textWatcher);