关于RecyclerView复用错乱问题的处理方法网上大部分是以下几种
1.最简单直接的方法ViewHolder不可复用(尽量不要使用此方法)
viewHolder.setIsRecyclable(false)
2.在onBindViewHolder里给View设置展示前,都需要将当前View的状态置为初始状态,其中if里设置的一定要在else里还原。 (注意此处的item为数据模型的字段,尽量使用数据模型内字段来区分要展示)
if(item.isChecked){
textView.setText("展示");
}else{
textView.setText("收起");
}
3.通过onBindViewHolder中的position或者viewHolder的getAdapterPosition来判断展示。
4.通过设置Tag来判断展示
5.如果是onBindViewHolder没有被调用,尝试是不是没重写getItemViewType导致。
@Override
public int getItemViewType(int position) {
return position;
}
再没被调用可以尝试
调整 RecyclerView 的复用逻辑和方式来解决 onBindViewHolder
没有调用的这个问题。
recyclerView.setItemViewCacheSize(int)
6.以上方法都不管用的话,可以检查下是否在onBindViewHolder使用了异步回调改变View状态,而在异步回来之前Adapter调用了notifyDataSetChanged()等刷新方法导致ViewHolder被刷新复用导致。如果是这种情况,需要保证避免异步回来之前刷新即可解决。