RecyclerView的ViewHolder复用错乱问题处理

关于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被刷新复用导致。如果是这种情况,需要保证避免异步回来之前刷新即可解决。

你可能感兴趣的:(Android,android)