본문 바로가기
개발/Android

[Android] recyclerView 업데이트

by blacktree 2022. 5. 17.
반응형

recyclerView를 사용하다보면 업데이트(갱신), 추가, 삭제, 수정이 필요할 때가 많다. 

 

간략하게

  1. 전체적으로 업데이트가 필요할 때
    1. public final void notifyDataSetChanged()
  2. 부분갱신적으로 업데이트가 필요할 때
    1. public final void notifyItemChanged(int position)
    2. public final void notifyItemChanged(int position, @Nullable Object payload)
    3. public final void notifyItemRangeChanged(int positionStart, int itemCount)
    4. public final void notifyItemRangeChanged(int positionStart, int itemCount,  @Nullable Object payload)
  3. 아이템 추가할 때
    1. public final void notifyItemInserted(int position)
    2. public final void notifyItemRangeInserted(int positionStart, int itemCount)
  4. 아이템 이동할 때
    1. public final void notifyItemMoved(int fromPosition, int toPosition)
  5. 아이템 삭제할 때
    1. public final void notifyItemRemoved(int position)
    2. public final void notifyItemRangeRemoved(int positionStart, int itemCount)

 

 

  • 설명

notifyDataSetChanged()

Data가 변경된 경우 등록된 옵저버에 변경을 알린다.

이 이벤트는 변경된 Data set에 대해 규명하지 않기에 옵저버에게 기존의 모든 아이템과 구조가 유효하지 않을 것이라고 알려준다. LayoutManager는 모든 자료를 다시 바인딩 하고, 모든 View를 다시 레이아웃하게 된다.

가능한 이 이벤트를 사용하는 것보다 해당 상황에 더 적합한 구체적인 이벤트를 사용하는 것이 성능 측면에서 좋다.

 

 

notifyItemChanged(int position, @Nullable Object payload)

  • position: (필수) 변경된 아이템의 위치
  • payload: (옵션) null 값인 경우 모든 업데이트로 식별

특정 아이템만 변경된 경우 등록된 옵저버에 변경을 알린다.

payload는 옵션으로 사용 가능하다. 

참고로 notifyItemChanged는 notifyItemRangeChanged를 호출한다. 

public final void notifyItemChanged(int position, @Nullable Object payload) {
    mObservable.notifyItemRangeChanged(position, 1, payload);
}

 

notifyItemRangeChanged(int positionStart, int itemCount,  @Nullable Object payload)

  • positionStart: (필수) 변경된 첫 번째 아이템의 위치
  • itemCount: (필수) 변경된 아이템의 개수
  • payload:  (옵션) null 값인 경우, 모든 업데이트로 식별

positionStart 위치에서 itemCount 개수까지 아이템이 변경된 경우 옵저버에게 변경을 알린다.

1개가 아닌 연속 여러개의 아이템의 변경이 있을 때 사용한다.

 

 

notifyItemInserted(int position)

  • position: (필수) 새로 삽입된 아이템의 위치

특정한 위치에 아이템이 변경된 경우 옵저버에게 변경을 알린다.

주의할 점은 position은 0부터 시작한다.

 

 

notifyItemMoved(int fromPosition, int toPosition)

  • fromPosition: (필수) 아이템의 현재 위치
  • toPosition: (필수) 아이템의 새로운 위치

아이템의 위치가 변경된 경우 옵저버에게 변경을 알린다.

 

 

notifyItemRemoved(int position)

  • positionStart: (필수) 삭제할 아이템의 위치

아이템이 삭제로 변경된 경우 옵저버에게 변경을 알린다.

 

 

728x90
반응형

댓글