본문 바로가기

나의 플랫폼/안드로이드

[Android] RecyclerView Adpater Refresh

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

RecyclerView를 사용한 후, Adapter를 계속 그냥 두는게 아니라 데이터가 변경이 되었을 때 항상 갱신을 해야 합니다.

이전 ListView나 GridView를 사용했을 때 저는 모든 갱신을 notifyDataSetChanged 함수만 썼습니다.

(제가 경력이 그리 많지 않아서..^^a)


RecyclerView를 쓸때는 좀 더 다양하게 갱신을 줄 수 있습니다.


## 추신 : 여기는 제가 직접 테스트를 하면서 생각된 기능으로 설명한 것입니다.

              API 의도와 틀릴 경우 언제든지 댓글 달아주세요^^ 수정 하겠습니다.


notifyDataSetChanged : 데이터가 전체 바뀌었을 때 호출. 즉, 처음 부터 끝까지 전부 바뀌었을 경우


notifyItemChanged : 특정 Position의 위치만 바뀌었을 경우. position 4 번 위치만 데이터가 바뀌었을 경우 사용 하면 된다.

notifyItemRangeChanged : 특정 영역을 데이터가 바뀌었을 경우. position 3~10번까지의 데이터만 바뀌었을 경우 사용 하면 된다.


notifyItemInserted : 특정 Position에 데이터 하나를 추가 하였을 경우. position 3번과 4번 사이에 넣고자 할경우 4를 넣으면 되겠죠

notifyItemRangeInserted : 특정 영역에 데이터를 추가할 경우. position 3~10번 자리에 7개의 새로운 데이터를 넣을 경우

notifyItemRemoved : 특정 Position에 데이터를 하나 제거할 경우.

notifyItemRangeRemoved : 특정 영역의 데이터를 제거할 경우

notifyItemMoved : 특정 위치를 교환할 경우 (Drag and drop에 쓰이겠네요^^)


위와 같이 이해하고 사용 해야 합니다.


잘못 사용할 경우 아래와 같은 에러가 발생 할 수 있으니 참고 하세요.



Error using the RecyclerView: The specified child already has a parent



java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid item position 4(offset:4).state:25