본문 바로가기
안드로이드

RecyclerView IndexOutOfException : invalid item position

by 디지털노마더 2021. 10. 29.

매일 앱의 버그를 모니터링하기 위해 Firebase Crashlytics을 확인한다.

최근 들어 목록을 출력하는 페이지에서 'IndexOutOfException' 이 발생하는 오류가 자주 리포팅되었다.

 

IndexOutOfException : inconsistency detected, invalid item position

막상 오류가 발생한 곳을 찾아서, 디버그를 실행해보면 정상적으로 목록이 출력되고 데이터도 오류 없이 전달됨을 확인할 수 있었다.

 

문제는 카테고리를 변경해서, 새로운 목록을 갱신해서 출력하는 과정에서 비정상적인 오류로 App Crash 증상을 확인할 수 있었다.

 

구글링을 통해, 확인해보니 RecyclerView에 ArrayList<Data>를 사용할 경우에 단순히 ArrayList.clear()을 통해서 데이터를 지우고 새로 추가한다고 해결되는 문제가 아니었다.

 

Recyclerview 내부 데이터가 할당되었을 경우, Call By Reference 특성에 따라 이미 할당된 데이터의 주소값은 유지되고 있는 듯 했다.

 

결론적으로 새로운 데이터를 갱신해야 할 경우는 새로운 객체 생성 'new ArrayList<Data>()' 하여 addAll() 시키면 문제없이 해결된다. 

 

(내부적으로 어떤 원리로 RecyclerView 목록이 재활용 되는지는 추가적인 학습이 필요하다..)

 

# 참고링크

검은곰의 아카이브 - RecyclerView와 IndexOutOfBoundsException

devgyugyu - [Android] java.lang.IndexOutOfBoundsException: Inconsistency detected

댓글