에르노트

리사이클러뷰 깜빡임 현상 제거 [setItemViewCacheSize()] 본문

Dev/Android

리사이클러뷰 깜빡임 현상 제거 [setItemViewCacheSize()]

두콩 2020. 3. 3. 14:40

뷰홀더가 바인딩될 때 텍스트의 깜빡임 현상이 발생한다

일반적인 속도로 화면을 끌어내릴 때는 거의 그 속도에 맞춰서 onBindViewHolder()가 호출되고, 사용자는 위화감을 느끼지 않는다. 그런데 위 예시처럼 급격하게 스크롤을 꺽어올려버리면 아이템이 다시 바인딩되는 과정에서 다소 딜레이가 발생할 수 있다. 위 경우는 미리 구성된 데이터를 바인딩하는 것이 아니라 api 콜을 통해 비동기적으로 선수 이름을 불러와서 바인딩하는 경우였으므로 그 딜레이를 사용자가 눈으로 느낄 수 있기에 문제가 되었다.

 

여러가지 시도를 해보았는데 결국 해결법은 매우 간단했다. 아이템의 개수가 정해진 경우라면 그 개수만큼, 혹은 스크롤이 지나갈 충분한 양만큼을 캐시해두면 된다. 그리고 안드로이드 리사이클러뷰에서는 자체적으로 그 메소드를 제공하고 있다.

 

RecyclerView.setItemViewCacheSize(int n)

이렇게 설정해두면 리사이클러뷰는 n만큼의 항목을 계속해서 유지한다. 아이템이 화면 밖으로 사라졌더라도 onBindViewHolder()의 재실행 없이 그 뷰로 돌아갈 수 있다는 것이다. 따라서 위와 같은 깜빡임(블링킹) 현상을 해결할 수 있다.

Comments