我们经常遇到的一个问题就是,当我们的RecyclerView的item中有EditText的时候,会出现数据错位或者输入的内容消失的问题,即你可能是在第一条的item中输入的是1,但是在第六条的item中也出现1,这样在你依次取EditText中的值的时候就会出现数据错位、不正确的现象。解决这种问题的方式就是对item中的EditText进行监听。
具体的操作是在onBindHolder方法中对EditText进行监听:
第一步:将EditText之前设置的TextWatcher移除。
if (holder.et_name.getTag() != null && holder.et_name.getTag() instanceof TextWatcher) { holder.et_name.removeTextChangedListener((TextWatcher) holder.et_name.getTag()); }
第二步:为EditText设置显示内容。
holder.et_name.setText(dataList.get(position).getName());
第三步:对EditText设置监听。
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) { dataList.get(position).setName(s.toString()); } }; holder.et_name.addTextChangedListener(textWatcher);
第四步:为EditText设置tag,将TextWatcher添加到tag中去。
holder.et_name.setTag(textWatcher);
对应project地址:https://github.com/ruxing1102/RecyclerViewEditText