티스토리 뷰

안드로이드를 한동안 놓고 잠시 자바스크립트로 외도를 했더니 눈감고도 구현했던 리사이클러뷰가 머릿속에서 완전히 삭제되었다. 땀이 쭉 나는 기분이다. 오랜만에 안드로이드 Developers 문서에서 관련 정보를 찾아봤다.

리사이클러뷰 어댑터에서 항목이 변경되는 순간 알려주는 메소드를 효율적으로 사용하기 위해 발 번역(구글 번역기를 이용한 의역) 해서 기록한다.


notifyDataSetChanged

void notifyDataSetChanged()

notifyDataSetChanged는 리턴 값 없는 메소드이다. Data set이 변경된 경우 그 내용을 등록된 옵저버에 알려준다. 데이터 변경 이벤트에는 '아이템 변경'과 '구조 변경'의 두가지 경우가 존재한다.

  • 아이템 변경(Item change): 단일 항목의 데이터가 업데이트 되었지만 위치는 변경되지 않은 경우
  • 구조 변경(Structural change): 아이템이 Data set 내에서 삽입, 삭제, 이동 된 경우

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

가능한 이 이벤트를 사용하는 것보다는 해당 상황에 더 적합한 구체적인 이벤트를 사용하는 것이 퍼포먼스에서 좋다. notifyDataSetChange는 사용하기 편리하긴 하지만, 최후의 수단으로 사용하는 것이 좋다.


notifyItemChanged

void notifyItemChanged (int position, Object payload)

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

아이템의 위치가 변경되면 옵저버에게 알려주는 메소드이다. payload 객체를 옵션으로 사용할 수 있다.

이 메소드는 구조가 변경되는 이벤트에는 반응하지 않는다. 개발자는 부분 변경을 위해 선택적으로 payload를 전달할 수 있다.

(payload가 어떤 역할을 하는지 명확하진 않다. 우선 구글 번역기에 돌린 내용을 적긴 하는데... 무슨 소린지 이해하려면 할 수록 정신이 혼미해지는 느낌이다.)아이템이 ViewHolder에 의해 이미 represent 되어 있고 같은 ViewHolder에 rebound 되는 경우에 이 payload는 병합되고 어댑터의 onBindViewHolder(ViewHolder, int, List)로 전달 될 것이다.

payload 값이 null인 경우에는 아이템의 기존 payload를 모두 클리어 하고 onBindViewHolder(ViewHolder, int, List)가 호출 될 때까지 추후 payload를 방지한다.


notifyItemInserted

void notifyItemInserted (int position)

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

position의 위치에 새로 삽입된 아이템이 있음을 옵저버에 알려 반영한다. 특정 포지션에 아이템을 삽입하고 싶으면 position 값에 +1을 해야 한다. (3번 위치에 삽입이 되었다면 2+1)

이것은 구조가 변경되는 이벤트이며, Data set의 기존 아이템은 최신의 것으로 간주된다. 위치가 변경될 수는 있지만 rebound 되지는 않는다.


notifyItemMoved

void notifyItemMoved (int fromPosition, int toPosition)

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

fromPosition의 위치값에서 toPosition의 위치값으로 아이템이 이동되었을 때 옵저버에 알리는 메소드이다.

이것은 구조가 변경되는 이벤트이다. 이동되지 않은 기존 아이템은 최신의 것으로 간주된다. (Drag & Drop 구현 할 때 사용할 수 있을 것 같다.)


notifyItemRangeChanged

void notifyItemRangeChanged (int positionStart, int itemCount, object payload)

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

positionStart 위치에서 시작해 itemCount 개수만큼 아이템이 변경되었을 때 옵저버에 알리는 메소드이다.

이것은 아이템 변경 이벤트이지 구조가 변경된 이벤트는 아니다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함