리사이클러뷰 만들다가 만난 문제들과 해결법

상상코딩·2023년 2월 14일
0

안드로이드

목록 보기
19/21

어떤 뷰타입의 경우에는 아이템 변화가 절대 없음을 알고 있을 때

  • 현상
    A뷰타입이 불리는 이벤트가 계속해서 들어오면 A뷰타입이 계속해서 불린다. 이 경우 A뷰는 절대 변하지 않을것이므로 애니메이션 처리도 없이 가만히 있기를 바람.

-> itemAnimator에 A뷰타입인 경우 재사용하지 않도록 itemAnimator 적용.

binding.recyclerView.itemAnimator = object : DefaultItemAnimator() {
    override fun canReuseUpdatedViewHolder(viewHolder: RecyclerView.ViewHolder): Boolean {
        return if (viewHolder.itemViewType == “A”) {
            true
        } else {
            super.canReuseUpdatedViewHolder(viewHolder)
        }
    }
}




submitList / notifyItemChanged 지양

클릭이벤트를 받아서 recyclerview의 뷰를 업데이트 하려고 할때, submitList해서 onBind에서 뷰 그리는것을 처리하려고 하지 않고 클릭 이벤트에서 처리할 수 있으면 submitList를 하면서 뷰를 다시 그리는 오버헤드를 줄일 수 있다.
(리사이클러뷰 리스트 순서 편집 시 - 같은 카테고리인 아이템들은 일반처리/ 나머지 카테고리는 블러처리를 해야했음 : bind에서 처리하여 아이템이 바뀌엇다고 처리하지 않고, 그냥 클릭이벤트로 두고 viewholder에 변수로 두기)

알파처리

  • 현상
    리사이클러뷰 bind에서 알파처리 적용 잘 안됨
  • 이유
    리사이클러뷰의 기본 애니메이터가 알파를 수정하기 때문에 이와 충돌이 나서 잘 안먹는 경우가 있음

-> onViewAttachedToWindow( onBind 다음에 불리는 함수 - 아이템에 윈도우에 보일 때 불리는 함수) 에서 알파 처리하도록 함.

profile
히히낙낙

0개의 댓글