RecyclerView 안에 아이템 데이터가 추가, 이동, 삭제 되었을 경우 반영하는 방법을 알아보려고 한다.
- 아이템 변경: 아이템 내용이 변경되고 위치 변경은 일어나지 않은 경우
- 구조 변경: DataSet안에서 아이템이 추가, 삭제, 이동되었을 경우
notifyDataSetChanged()
public final void notifyDataSetChanged()
- 사용하기는 편리하지만 기본적으로 변경사항에 대한 내용을 지정하지 않는다.
- 모든 아이템과 구조가 유효하지 않다고 가정하고 업데이트를 한다.
- 성능 측면에서는 효율성은 떨어진다.
notifyItemChanged(int)
public final void notifyItemChanged(int position)
- 아이템 한 개의 내용이 변경되었을 경우 사용한다.
- position: 변경된 아이템 위치
notifyItemChanged(int, Object)
public final void notifyItemChanged(int position, Object payload)
- notifyItemChanged(int)와 동일하지만 payload를 옵선으로 사용할 수 있다.
- payload: 어탭터의 onBindViewholder()가 호출될때 넘겨받을 수 있는 객체이다.
- 특정 position의 내용을 payload값으로 구분하여 업데이트할 때 사용된다.
notifyItemRangeChanged(int, int)
public final void notifyItemRangeChanged(int positionStart, int itemCount)
- 연속된 여러개의 아이템 내용이 변경되었을 경우 사용한다.
- positionStart: 변경된 아이템의 시작 위치
- itemCount: 변경된 아이템의 갯수
notifyItemRangeChanged(int, int, Object)
public final void notifyItemRangeChanged(int positionStart, int itemCount, Object payload)
- notifyItemRangeChanged(int, int)와 동일하지만, payload를 옵션으로 사용할 수 있다.
- positionStart: 변경된 아이템의 시작 위치
- itemCount: 변경된 아이템의 갯수
- payload: 특정 position의 내용을 payload값으로 구분하여 업데이트할 때 사용된다.