필자는 아이템의 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 를 전혀 신경쓰지 않았기에 치명적인 오류가 발생하게 된 것이다.
혹시 이와 같은 실수를 범하여 고된 삽질을 하고 있는 사람들에게 이 글이 도움이 되면 좋겠다.
'안드로이드 코딩일지' 카테고리의 다른 글
[Android] WorkManager 'Could not instantiate Worker' 해결법 (0) | 2021.02.24 |
---|---|
[Android] 안드로이드 10 이상 기기에서 클립보드 액세스가 안될 때 (1) | 2021.02.20 |
[Android] Koin 을 통한 ViewModel Injection 먹통 오류 해결 방법 (0) | 2021.01.27 |