[Android / Kotlin] RecyclerView 업데이트

Subeen·2024년 1월 8일
0

Android

목록 보기
35/73

RecyclerView의 아이템이 변경되거나 추가, 삭제 등이 되었을 경우 RecyclerView에 반영하는 방법에 대해 정리해보려 한다. RecyclerView를 업데이트 하기 위해서는 내용 변경 후 Adapter에 알려주면 된다.

전체적으로 변경 되었을 경우

notifyDataSetChanged()

기본적으로 변경 사항에 대한 내용을 지정하지 않으므로 모든 아이템과 구조가 유효하지 않다고 가정하고 업데이트를 하므로 성능 측면에서의 효율성은 떨어진다.

아이템 내용이 변경 되었을 경우

notifyItemChanged(position: Int)

아이템 한 개의 내용이 변경 되었을 경우 사용한다.

  • position : 변경 된 아이템의 위치
notifyItemChanged(position: Int, payload: Obejct)
  • position : 변경 된 아이템의 위치
  • payload : onBindViewholder()가 호출될 때 넘겨받을 수 있는 객체이며 특정 position의 내용을 payload 값으로 구분하여 업데이트 할 때 사용한다.
notifyItemRangeChanged(positionStart: Int, itemCount: Int)

연속 된 여러 개의 아이템의 내용이 변경 되었을 경우 사용한다.

  • positionStart : 변경 된 아이템의 시작 위치
  • itemCount : 변경 된 아이템의 개수
notifyITemRangeChanged(positionStart: Int, itemCount: Int, payload: Obejct)
  • positionStart : 변경 된 아이템의 시작 위치
  • itemCount : 변경 된 아이템의 개수
  • payload : onBindViewholder()가 호출될 때 넘겨받을 수 있는 객체이며 특정 position의 내용을 payload 값으로 구분하여 업데이트 할 때 사용한다.

아이템이 추가 되었을 경우

notifyItemInserted(position: Int)

아이템 한 개를 새로 추가할 경우 사용한다.

  • position : 추가 된 아이템의 위치
notifyItemRangeInserted(positionStart: Int, itemCount: Int)

연속 된 아이템을 추가할 경우 사용한다.

  • positionStart : 추가 된 아이템의 시작 위치
  • itemCount : 추가 된 아이템의 개수

아이템이 이동 되었을 경우

notifyItemMoved(fromPosition: Int, toPosition: Int)

한 개의 아이템 위치를 이동할 경우 사용한다.

  • fromPosition : 기존 아이템의 위치
  • toPosition : 변경 될 아이템의 위치

아이템이 삭제 되었을 경우

notifyItemRemoved(position: Int)

한 개의 아이템을 삭제할 경우 사용한다.

  • position : 삭제할 아이템의 위치
notifyItemRangeRemoved(positionStart: Int, itemCount: Int)

연속 된 여러 개의 아이템을 삭제 할 경우 사용한다.

  • positionStart : 삭제할 아이템의 시작 위치
  • itemcount : 삭제할 아이템의 개수

사용법

val items = loadList() // 아이템 리스트
val adapter = ProductAdapter(items) // 어댑터 생성 

// RecyclerView에 어댑터 연결 
binding.productRecyclerView.run {
	layoutManager = LinearLayoutManager(this@MainActivity)
	addItemDecoration(
		DividerItemDecoration(
			this@MainActivity,
		LinearLayoutManager.VERTICAL
		)
	)
	this.adapter = adapter
}

adapter.itemClick = object : ProductAdapter.ItemClick { // 아이템 클릭시 삭제 
	override fun onItemClick(view: View, position: Int) {
		adapter.notifyItemRangeRemoved(position, items.size)
}

참조
RecyclerView 업데이트 및 갱신 방법

profile
개발 공부 기록 🌱

0개의 댓글