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
'나의 플랫폼 > 안드로이드' 카테고리의 다른 글
[Andoird] Button 클릭 시, textColor 변경 (0) | 2015.12.17 |
---|---|
[Android] Recycler View 사이에 divider 크기 조절 (0) | 2015.12.17 |
[Android] Background partial concurrent mark sweep GC freed (8) | 2015.12.16 |
[Android] RecyclerView 에서 각 View 크기 조절 (0) | 2015.12.15 |
[Android] Activity 간 Material Design Transition 적용 (0) | 2015.12.15 |