Hanantadk

[RecyclerView ] Inconsistency detected. Invalid item position

Beberapa waktu lalu saya sering menemukan masalah terkait recyclerview. Salah satunya adalah error Inconsistency detected. Invalid item position. Error ini  kadang sulit untuk di repro/ di trigger, terjadi begitu saja.

This is the java.lang.IndexOutOfBoundsException which can be introduced in many scenarios with a improper coding for updating RecyclerView adapter or its item like: when if you try to change/insert/remove in adapter view item and at the same time you are trying to set new adapter. Sometimes you found you are not able to reproduce this issue but it is coming inconsistently.

Menurut Rahul Dhanuka, error ini bisa terjadi ketika mencoba untuk mengubah/menambah/menghapus data pada adapter dan set adapter baru pada waktu bersamaan.

ERROR CASE
Untuk kasus yang saya hadapi adalah ketika melakukan refresh list kemudian melakukan scrolling/ loadmore.  Pada saat refresh selesai maka akan menghapus dan menambah data pada list, dan ketika scrolling kemungkinan adapter melakukan recreate/ recycle item pada saat bersamaan sehingga memunculkan error tersebut.

SOLUTION
Menurut Rahul Dhanuka bisa diatasi dengan menambahkan mRecyclerView.getRecycledViewPool().clear() sebelum mAdapter.notifyDataSetChanged()

Tetapi untuk kasus yang saya hadapi tidak bisa menggunakan cara tersebut.
Cara yang coba saya lakukan adalah dengan mematikan animasi pada recyclerview. Karena untuk beberapa kasus animasi pada layoutManager membuat list tidak berjalan semestinya seperti pada kasus yang saya hadapi. Caranya cukup dengan menambahkan kode berikut : mRecyclerView.setItemAnimator(null);
 

Jika ada kesalahan mohon dikoreksi, terimakasih banyak

REFERENSI

  1. java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid item position: Android RecyclerView
  2. Inconsistency detected. Invalid item position

Leave a Reply

Your email address will not be published. Required fields are marked *