Android java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid item position 3(offset:3).state:4 android.support.v7.widget.RecyclerView

2018. 11. 1. 16:49·Android Development
반응형
 

RecyclerView 를 사용하다 보면, 아래 같은 에러를 마주치는 경우가 있다.

java.lang.IndexOutOfBoundsException: Inconsistency detected.
	Invalid item position 3(offset:3).state:4 android.support.v7.widget.RecyclerView

보통 RecyclerView 에서 가져온 adapter 에 새로운 데이터 리스트를 넣어 notifyDataSetChanged() 까지 처리를 했는데도,

어느 정도 동작을 하다가 오류를 발생하게 되는 경우가 더러 있다.

 

일반적으로 RecyclerView 어댑터에 업데이트할 데이터 목록을 넣어 줄텐데, 

그럴 경우 참조로 넘기도록 처리하면서 이슈가 생기는 경우가 많다.

 

call by reference, call by value 개념을 이해하면 바로 알 수 있는 실수인데, 

보통 리스트를 사용해서 데이터들을 담은 후 어댑터의 리스트 객체를 새로 생성하고,

업데이트 할 데이터를 모두 추가해서 처리하면 이런 이슈는 해결된다. addAll 로 처리하면 된다. 

 

참고:

DiffUtil 을 사용해서 처리하면 notifyDataSetChanged() 를 호출하는 것보다 훨씬 나은 사용자 경험이 제공된다. 

전체 데이터를 모두 변경 처리하는 것보다 일부 변경된 것만 업데이트 해주는 것이 좋으니까.

이 경우에는 기존 어댑터의 데이터 리스트를 clear() 한 후 addAll() 을 해서 넣어 준 후, 

notifyDataSetChanged() 호출이 아닌 DiffUtil 호출 메서드를 통해서 업데이트 처리하면 된다.

저작자표시 비영리 변경금지 (새창열림)

'Android Development' 카테고리의 다른 글

Android Studio environment setting  (0) 2019.05.04
Flutter init  (0) 2019.01.30
Vector drawable, error and backward compatibility  (0) 2018.09.12
Jsoup & encoding & charset & html  (0) 2018.01.11
페이스북 앱 링크 연결 (link to Facebook app if installed in device)  (0) 2018.01.05
'Android Development' 카테고리의 다른 글
  • Android Studio environment setting
  • Flutter init
  • Vector drawable, error and backward compatibility
  • Jsoup & encoding & charset & html
fogthegreat
fogthegreat
아주 오랫동안 이것 저것 개발하면서 배우고 찾아 본 것들을 적거나 모았습니다. 불편한 점이 있다면 알려주세요. (과거에 불펌한 글들을 모두 제거하고 있는 중이에요. 🙏)
  • fogthegreat
    꿈소년의 개발 이야기
    fogthegreat
  • 전체
    오늘
    어제
    • 전체보기 (242)
      • Software Engineering (56)
      • Android Development (78)
      • 일상다반사 (63)
      • 책에 대한 거의 모든 것 (11)
      • 영어공부 (1)
      • ETC (0)
      • 챌린지 (1)
      • Do it 스터디! (32)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 향로
    • 청하가 제안하는 소프트웨어 엔지니어로써 재미있게 사는 …
    • WhoRU? Story...♡
    • Snapshot
    • 두잇! - 이지스퍼블리싱
    • 제이펍의 참 똑똑한 2비트 책 이야기
    • Inpa Dev
  • 공지사항

  • 인기 글

  • 태그

    안드로이드 개발
    build.gradle
    css
    Android 4.1
    linux
    OOM
    노개북
    탐지기법
    html
    JavaScript
    Eclipse
    보안
    git
    안철수
    C++
    하버드
    js
    구글
    코틀린
    google
    리눅스
    java
    Android
    ActiveX
    개발
    자바
    hcj
    안드로이드
    gradle
    kotlin
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
fogthegreat
Android java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid item position 3(offset:3).state:4 android.support.v7.widget.RecyclerView
상단으로

티스토리툴바