最近项目中遇到的问题,在RecyclerView中嵌套了EditTextView,在填写了数据,notify后,导致了数据错乱。下面是解决方案:
方案一 (暴力解决)
设置缓存个数为0,数据较少时可以使用,当数据较多可能会影响recyclerView性能
setViewCacheSize(0)
方案二(setTag)
1.给item设置tag
2.将position设置到EditTextView中
3.在TextWatcher中取EditTextView中的tag(position)
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final DetailsViewHolder viewHolder;
if (convertView != null) {
viewHolder = (DetailsViewHolder) convertView.getTag();
} else {
convertView =
LayoutInflater.from(mContext).inflate(R.layout.item_new_purchaseo, null);
viewHolder = new DetailsViewHolder(convertView);
convertView.setTag(viewHolder);
}
}
viewHolder.number.setTag(position);
viewHolder.number.clearFocus();
viewHolder.number.addTextChangedListener(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) {
int pos = (int) viewHolder.number.getTag();
Log.e("log--->",pos+"___"+s.toString());
list.get(pos).setUnit(viewHolder.number.getText().toString());
}
@Override
public void afterTextChanged(Editable s) {
}
});