如果没有手动添加Item这个功能,比较好处理一些,最简单的方法禁止复用holder.setIsRecyclable(false);,但如果有手动添加Item,或者要监听EditText的addTextChangedListener,这时就是禁止复用也没有效果。
此时,就得使用绑定tag的方法:
第一、为列表实体类添加一个属性uid,作为一个唯一标志,再创建实体类Data的时候,为这个属性设置一个唯一值
//如为其设置一个单位为纳秒的时间戳
Data data = new Data();
data.setUid(System.nanoTime());
第二、在adapter里设置tag
@Override
public void onBindViewHolder(final CustomAdapter.CustomViewHolder holder, final int position) {
final Data data = list.get(position);
holder.iv.setImageResource(data.getResId());
holder.et.setTag(data.getUid());//获取唯一的uid设置到tag
holder.et.setText(data.getStr());
final 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) { }
@Overrid

当在RecyclerView中需要手动添加列表项且包含EditText时,会出现数据混乱的情况。通过设置唯一uid作为Tag,可以有效解决这个问题。首先在列表实体类中添加uid属性并确保其唯一性,然后在Adapter中利用uid设置每个EditText的Tag。添加新Item时,确保为新数据分配唯一的uid。如需完整代码,参考https://github.com/chaoyangsun/recyclerview。
2471

被折叠的 条评论
为什么被折叠?



