본문 바로가기
Developer/Android, Java

[안드로이드] EndlessRecyclerViewScrollListener 사용 시 주의할 점 (resetState)

by Doony 2019. 5. 21.

지난 번에 EndlessRecyclerViewScrollListener의 기본적인 사용 방법에 대해 포스팅 한데 이어, 이번에는 사용 시 주의할 점을 한가지 공유하고자 합니다.
보통 앱에서 이 리스너를 사용하는 이유는, 서버나 DB에서 더 불러올 데이터가 있기 때문입니다. 그런데 가끔씩은, 불러오는 데이터 자체를 모두 refresh하는 경우가 있는데요. 다음과 같은 상황을 생각해보면 됩니다.

  1. 앱에서 맛집을 검색함. 스크롤을 내리면서 계속 뜨는 맛집들을 보는데, 너무 필터링이 안되어 있다는 것을 깨달음.
  2. 지역으로 필터를 걸었음. 그랬더니, 전체 데이터가 뷰에서 없어지고, 필터링 된 데이터가 새로불러와짐.

이런 경우라면, 앱에서 스크롤 state은 어떻게 처리할까요? 별도로 state을 처리해주지 않는 이상, 1번에서 이미 많이 내렸던 스크롤의 상태를 앱에서는 유지할 것입니다. 그렇다면 어떤 문제가 발생할까요?
바로 2번에서 데이터를 더 불러오지 못한다는 문제가 발생합니다.
앱에서 인지하는 최하단 스크롤은 1번에서 이미 많이 내렸던 스크롤입니다. 2번 데이터가 다시 뜬 상황에서, 가장 하단부로 스크롤을 내리더라도, 앱에서는 최하단에 왔다고 인지하지 못합니다. 즉, 가장 하단부에 왔음에도 scrollListener가 작동하지 않는 것입니다.

때문에, 만약 전체 데이터를 refresh하는 상황이 있다면, scroll의 상태로 reset해주는 과정이 필요합니다.
다행히도, endlessRecyclerViewScrollListener에서는 스크롤을 reset하는 함수를 가지고 있습니다.

scrollListener.resetState(); 
cs

Refresh하는 부분에 이 한줄만 삽입해주면, 스크롤 상태도 같이 리셋되어 이상 없이 사용할 수 있습니다.

댓글