혹시 RecyclerView를 사용하면서 RecyclerView의 데이터 삭제 또는 추가 과정에서
RecyclerView가 깜빡이는 현상 때문에 고생하셨나요??
RecyclerView 깜빡이는 현상에 대하여 알아봅시다!
깜빡이는 현상?
저는 RecyclerView를 사용하면서 해당 데이터 추가 또는 삭제 시 RecyclerView의 데이터를 갱신 시켜주시 위해
notifyDataSetChange() 메소드를 자주 사용했습니다.
notifyDataSetChanged() 메서드 실행 후 어떤 동작이 실행될까요?
사실 저는 지금까지 아무생각 없이 사용했습니다.
(무조건 공식처럼 외웠습니다.)
데이터 갱신 = notifyDataSetChanged()
notifyDataSetChanged()는 결과적으로 RecyclerView의 모든 자식 뷰들을 다시 그려 생성합니다.
전체적으로 onBindViewHolder()를 호출하여 자식 뷰를 갱신시키기 때문에 순간적으로 깜빡이는 현상이
나타날 수 있습니다.
RecyclerView의 깜빡이는 현상을 개선시키려면
onBindViewHolder()의 호출을 최소화해야 합니다.
setHasStablelds
RecyclerView Adapter의 메소드중 setHasStableds() 메서드가 존재합니다.
setHasStableds(true)를 사용하여 RecyclerView의 각각 아이템 값의 position을 지정된 Id 값으로 저장합니다.
(setHasStableds 사용 시 getItemId() 메서드를 반드시 정의해줘야 합니다.)
class RecyclerViewAdapter(
private val list: MutableList<String>
): RecyclerView.Adapter<RecyclerViewAdapter.RecyclerViewHolder>() {
private var itemLists: MutableList<String> = list
init {
setHasStableIds(true)
}
override fun getItemId(position: Int): Long {
return position.toLong()
}
...
}
위와 같이 각각 아이템을 RecyclerView의 position이 아닌 Id값으로 저장하여
onBindViewHolder()의 과도한 호출을 최소화 할 수 있습니다.
상황에 맞는 데이터 변경 메소드 호출
데이터 갱신에 대한 메소드가 notifyDataSetChaged 하나뿐일까요??
AndroidStudoi에서 notifyDataSetChanged 메서드를 확인해보면
notifyDataSetChanged 외 다른 메서드들도 존재한다는 걸 알려주고 있습니다.
변경 : notifyItemChanged, notifyItemRangeChanged
추가 : notifyItemInserted, notifyItemRangeInserted
삭제 : notifyItemRemoved, notifyItemRangeRemoved
이동 : notifyItemMoved
notifyDataSetChanged는 모든 데이터를 변경합니다.
하지만 위와 같이 다른 메서드들을 사용한다면
불필요한 데이터 갱신을 하지 않고 필요한 데이터들만 갱신시켜주기 때문에
데이터 변경사항에 맞는 함수를 골라 사용한다면 퍼포먼스의 효율이 좋아질 것 같습니다.
notifyItemMoved() , notifyItemRemoved() 를 활용한 예제는 아래를 참고 해주세요!
여기까지 저의 긴 글을 읽어주셔서 감사합니다.
제가 습관적으로 코딩을 하는 그날까지 습관적으로 코딩을 하기 위해 글 작성을 꾸준하게 하겠습니다.
'Android > 스터디 노트' 카테고리의 다른 글
Clean Code - 주석 어떻게 사용하고 있나요? (0) | 2022.08.31 |
---|---|
[Android] RecyclerView Drag&Drop/Swipe 기능 구현(ItemTouchHelper) 드래그 앤 드롭 (1) | 2022.08.21 |
[Android] Kotlin RecyclerView 알아보기 (0) | 2022.08.17 |
[Google Play Store] 구글 테스트 계정의 모든것, 구글심사 테스트 계정, 인앱결제 테스트 계정 (4) | 2022.07.25 |
[Android] SHA-1 key 확인 (AndroidStudio - Bumblebee ver.) (0) | 2022.05.11 |
최근댓글