Android 개발 Tip.
- RecyclerView
scroll하면 item 재사용 오류 해결 방법
자꾸 까먹어서 작성해두는 소소한 팁.
안드로이드 RecyclerView는 스크롤을 하면 item의 데이터가 막 뒤섞이고 난장판이 된다.
안드로이드 리싸이클러뷰를 만들어 보면
참 황당한 오류를 발견하게 된다.
item이 여러 개 있을 때
그 중 어떤 item이 구조나 디자인이나 값 등 변화가 일어나면
스크롤을 했을 때 데이터가 뒤섞이는 현상이 나타난다.
예를 들어 똑같은 구조의 item이 10개가 있는데
그 중에서 2번째 item의 데이터나 디자인이 변경되었을 때
스크롤을 해보면 막 그 변경된 데이터나 디자인이 다른 item에서도 나타난다.
또 2번째 item은 초기화되고 아무튼 쉽게 말해서 개판이 된다.
이런 현상이 발생하는 이유는
recyclerview의 재사용이다.
recyclerview는 리소스를 아끼기 위해 뷰를 재사용한다.
그래서 재사용 막기 방법을 쓰기도 하는데
그러면 리싸이클러뷰의 목적이 소실되므로 권장하는 방식은 아니다.
일단 가장 간단한 해결 방법은
리싸이클러뷰 Adapter 파일에 다음 메소드를 오버라이드하는 것이다.
1
2
3
4
|
@Override
public int getItemViewType(int position) {
return position;
}
|
cs |
ViewType을 받아서 스크롤을 해도 그 형태를 유지시켜준다.
각자의 recyclerview 디자인에 따라서 해결이 안 될 때도 있을텐데
또 다른 상황에서의 해결법은 해당 문제가 발생했을 때 또 알아보고 포스팅해야겠다.
도대체 구글은 recyclerview를 왜 이렇게 만들었을까?
왜 이런 문제 해결을 개발자들에게 맡겼을까?
그냥 애초에 자체적으로 해결되게 만들었으면 될 것을.
스크롤 했을 때 아이템 데이터가 뒤섞이길 바라는 개발자가 세상에 어디 있을까?
참 이해할 수 없는 집단이다.
'Android 개발 > android :: Tip' 카테고리의 다른 글
안드로이드 앱 내리기 (게시 취소) 방법 (0) | 2022.03.09 |
---|---|
[안드로이드 Animation] 애니메이션 끝나는 시점 받기 (0) | 2021.03.29 |
[안드로이드 RecyclerView, ListView] ScrollBar 사라지지 않고 유지하는 방법 (0) | 2021.01.14 |
[안드로이드 RecyclerView] 구분선 제거하는 방법 (divider 없애기) (0) | 2021.01.14 |
[안드로이드 웹뷰] WebView 하얀화면 아무것도 안 뜨는 현상 해결 (0) | 2021.01.13 |
[안드로이드 Gradle] 최신 Library dependencies 추가를 직접 implementation 하는 방법 (0) | 2020.12.11 |
[안드로이드 Animation] startAnimation(), setAnimation() 차이 구분 (1) | 2020.12.06 |
[안드로이드 String] 특정 문자 기준으로 자르기 - substring, indexOf (0) | 2020.11.11 |
댓글