Recycler View: Inconsistency detected. Invalid view holder adapter positionViewHolder

Solution 1:

It looks similar with known android bug

There are quite ugly, but working approach

public class WrapContentLinearLayoutManager extends LinearLayoutManager {
    //... constructor
    @Override
    public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) {
        try {
            super.onLayoutChildren(recycler, state);
        } catch (IndexOutOfBoundsException e) {
            Log.e("Error", "IndexOutOfBoundsException in RecyclerView happens");
        }
    }
}


mRecyclerView.setLayoutManager(new WrapContentGridLayoutManager(getContext(), spanCount));

For me it works without any by-effect.

Solution 2:

This issue is a known bug of RecyclerView. The best solution is, clear the list every time before refresh RecyclerView.

For fix this issue just call notifyDataSetChanged() with empty list before updating recycle view.

For example

//Method for refresh recycle view

if (!yourList.isEmpty())

yourList.clear(); //The list for update recycle view

adapter.notifyDataSetChanged(); 

Solution 3:

put this line along with setting recyclerView. issue was fixed by setting ItemAnimator to null for RecyclerView.

in kotlin

    recyclerView.layoutManager = LinearLayoutManager(this)
    recyclerView.itemAnimator = null

in java

    recyclerView.setItemAnimator(null);

Solution 4:

Use this to refresh a RecyclerView

items.clear(); //here items is an ArrayList populating the RecyclerView
adapter.notifyDataSetChanged();
items.addAll(list);// add new data 
adapter.notifyItemRangeInserted(0, items.size);// notify adapter of new data

`

Solution 5:

I had similiar issue, and also this solution has helped me, after I've added new item to my RV:

recyclerView.getRecycledViewPool().clear();
adapter.notifyDataSetChanged();