Android Kotlin Infinite Scrolling

이성진·2023년 11월 2일
0

TIL

목록 보기
65/95
post-thumbnail
post-custom-banner

Android Kotlin에서 무한 스크롤 구현

오늘은 최종 프로젝트 작업도중 무한 스크롤 구현을 배웠습니다. 이는 사용자가 목록 끝으로 스크롤할 때 새 데이터를 가져와 표시하여 원활하고 중단 없는 사용자 경험을 보장하는 모바일 앱에서 널리 사용되는 기능입니다.
마지막에는 마지막 페이지 입니다. 라는 문구를 남겼습니다.

- OnScrollListener 구현

매서드를 구현 RecyclerView.OnScrollListener() 하고 재정의 합니다. onScrollStateChanged

private val scrollListener by lazy {
     object : RecyclerView.OnScrollListener() {
         override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) {
             super.onScrollStateChanged(recyclerView, newState)
             if (newState == RecyclerView.SCROLL_STATE_IDLE
                 && !binding.tourRecyclerview.canScrollVertically(1)
             ) {
                 // Load more data here
             }
         }
     }
 }

위 리스너는 RecyclerView가 더 이상 수직으로 스크롤할 수 없는지 , 즉 끝에 도달했는지 확인합니다.

- 추가 데이터 로드

목록 끝에 도달하고 가져올 데이터가 더 있으면 (!isLastPage)다음 페이지의 데이터를 가져옵니다.

if (isLastPage) {
    toast("마지막 페이지 입니다.")
    return
}
when (tourTheme) {
    TourTheme.POPULAR.themeId -> getFestivalSearch(++currentPage)
    else -> getThemeSearch(theme, ++currentPage)
}

변수 currentPage는 다음에 가져올 페이지를 추적합니다.

- RecyclerView에 리스너 바인딩

스크롤 리스너를 정의한 후 RecyclerView에 추가됩니다.

binding.tourRecyclerview.addOnScrollListener(scrollListener)

- 어댑터의 데이터 업데이트

새 데이터를 가져오면 submitList() 메서드 를 사용하여 이 데이터로 어댑터를 업데이트 합니다. `submitList()

tourAdapter.submitList(festivals)

- 종료 조건

새 데이터 가져오기를 언제 중지할지 결정하는 것이 중요합니다. 이를 추적하는 데 부울 isLastPage이 사용됩니다. 가져온 데이터 크기가 예상 크기보다 작으면 더 이상 가져올 데이터가 없다는 의미입니다.

if (festivals.size < 20) {
    isLastPage = true
}
  • 무한 스크롤은 사용자에게 부담을 주지 않으면서 대량의 데이터를 원활하게 제공하는 방법입니다. 데이터를 청크로(chunk) 로드하고 필요에 따라 더 많은 데이터를 가져옴으로써 사용자가 항상 탐색할 새로운 콘텐츠를 확보할 수 있습니다.
profile
2023.08 ~ Android Kotlin 공부
post-custom-banner

0개의 댓글