본문 바로가기
안드로이드 코딩일지

[Android] RecyclerView 의 순서가 재구성될 때 ImageView 가 사라지는 이유는?

by HAERO_KR 2021. 1. 20.

안드로이드 앱 개발에 있어 빠질 수 없는 RecyclerView

 

필자는 아이템의 View 에 ImageView 가 포함된 RecyclerView 를 만들고,

(이 때 Item 객체에 Image 가 포함되어 있지 않으면, View.GONE 을 통해 ImageView 를 숨기는 기능을 구현했다.)

사용자가 선택한 정렬 필터 등에 의해 RecyclerView 의 Item 순서가 재구성 되는 기능을 구현했을 때

원래 ImageView 에 이미지가 있던 Item 의 ImageView 가 사라지는 오류를 겪었다.

 

문제의 코드는 아래와 같다.

처음에 대체 이 코드가 뭐가 문제인지 몰라서 RecyclerView 를 탓하곤 했다.

정말 평범한 코드다. 이미지가 없는 이미지면 View.GONE 을 통해

ImageView 를 사라지게 하고, 만약 이미지가 있다면

해당 아이템의 ImageView 에 해당 이미지를 적용시키는 코드이다.

 

하지만 이 코드에는 정말 치명적으로 간과한 부분이 있다.

RecyclerView 의 특성을 생각하지 못했던 것이다.

 

RecyclerView 는 '재사용성'을 강조하여 성능을 끌어낸 일종의 ListView 이다.

즉, 아이템의 View 를 재사용하여 목록을 재구성한다는 것이다.

 

그렇기 때문에 원래 ImageView 에 Image 가 있던 아이템이더라도,

어떠한 정렬 기준에 의해 Position 이 변경되게 되면 이전에 그 Position 에 있던 아이템이 Image 가 없었다면

ImageView 가 View.GONE 속성이 유지되어 버린다는 것이다.

 

따라서 아래처럼 코드를 작성해야 했다.

Else 를 전혀 신경쓰지 않았기에 치명적인 오류가 발생하게 된 것이다.

혹시 이와 같은 실수를 범하여 고된 삽질을 하고 있는 사람들에게 이 글이 도움이 되면 좋겠다.