제이슨의 개발이야기

안드로이드 리사이클러뷰 스크롤 할때 view가 꼬이는 문제 , 뒤섞이는 문제 해결방법 본문

오류상자

안드로이드 리사이클러뷰 스크롤 할때 view가 꼬이는 문제 , 뒤섞이는 문제 해결방법

제이쓰은 2021. 7. 12. 15:17
728x90
반응형

안녕하세요! 오늘은 안드로이드 리사이블러뷰 를 빠르게 스크롤 하거나 등등 많은 데이터를 스크롤 할때 아이템이 뒤 섞이거나 view가 꼬이는 현상이 발생하는대 해결 방법에 대해서 글을 써보려고 합니다! 

 

일단 이러한 문제가 발생하는 이유는  각각의 view들을 재 활용하면서 발생하는 문제입니다 

 

이 문제를 해결하는 방법은 크게 두가지가 있는대 

 

첫번째는 rcv.setItemViewCacheSize(adapter.currentList.size) 을 통해 문제를 해결하는 방법입니다

 

이 setItemViewCacheSize 메소드는 스크롤 하면서 뷰가 사라지더라도 어댑터 리스트 크기 만큼 캐시에 저장해 놓으면 뷰가 꼬이지않습니다

그러나 데이터의 양이 많을 경우 그 데이터의 양 만큼 캐시에 저장해 놓으면 리사이클러뷰의 재활용의 장점을 잃는 것이기 때문에 추천하는 방식은 아닙니다 캐시사이즈를 정하는 메소드는 빠르게 스크롤을 할때 전체 부분이 아닌 일정 부분을 미리 캐시에 저장해놓아서 자연스럽게 스크롤 되게 하는 역활로 사용해야합니다! 

대충 rcv.setItemViewCacheSize(30) 이정도로 사용하면 좋을거같습니다

 

그러면 두번째 방법은 무엇일까 

 

두번째 방법은

@Override 
public int getItemViewType(int position) { 
	return position;
}

 

 

각각의 뷰타입을 position 값으로 리턴 하는 방식으로 Overriding 하는 것입니다 

 

이런식으로 하면 각각의 뷰들이 고유의 뷰 타입을 갖게 되어서 View 가 꼬이는 문제를 해결 할 수 있습니다

 

첫번째 방법은 그냥 이런 방법도 있다 란 것을 알려드리는 거고 두번째 방법을 사용하셔야 합니다!!!!!

 

 

실제로 구글에서도 두번째 방식으로 문제를 해결하라고 하는대 

 

도대체 애초에 이런 문제가 발생하지 않도록 getItemViewType 메소드를 위 방식대로 만들어주면 되는대 

왜 굳이 개발자가 오버라이딩 하라는 건지 ㅠㅠ 

 

728x90
반응형