본문 바로가기

앱 개발/Kotlin_Android

무한 스크롤 기능 구현

(1) ScrollListener

 

1. RecyclerView 및 Adapter 설정

 

2. RecyclerView에 ScrollListener를 추가하여 스크롤 위치를 감지하고 새로운 데이터를 로드

// class SearchFragment

 

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    searchAdapter = SearchAdapter(object : SearchAdapter.OnItemClickListener {
        override fun onClick(data: HomeVideoModel) {
            (requireActivity() as MainActivity).openVideoDetailFromHome(data)
        }
    })
    setRecyclerView()
    updateToScroll()

    observeViewModel()

}


private fun updateToScroll() {
    binding.recyclerViewSearch.addOnScrollListener(object : RecyclerView.OnScrollListener() {
        override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) {
            super.onScrollStateChanged(recyclerView, newState)
            if (!binding.searchRecyclerContainer.canScrollVertically(1)) {
                val listSize = viewModel.searchVideo.value!!.size - 1
                viewModel.extraSearchVideos(binding.etSearch.text.toString())
                (binding.recyclerViewSearch.adapter as SearchAdapter).notifyItemRangeChanged(
                    listSize,
                    8
                )
            }
        }
    })
}


3. 네트워크 요청을 통하여 새로운 데이터를 가져오기

 

private fun observeViewModel() {
    viewModel.searchVideo.observe(viewLifecycleOwner) { searchVideo ->
        if (searchVideo != null) {
            searchAdapter.setItem(searchVideo)
            (binding.recyclerViewSearch.adapter as SearchAdapter).notifyDataSetChanged()
        }
    }
}

 

------------------------------------------------------------------------------------------------

 

(2) Paging3

 

https://velog.io/@godmin66/Paging-3-%EC%A0%81%EC%9A%A9%ED%95%98%EA%B8%B0

 

Paging 3 적용하기

Paging 3 라이브러리를 사용하면 로컬 저장소에서나 네트워크를 통해 대규모 데이터 세트의 데이터 페이지를 로드 하고 표시할 수 있습니다.이 방식을 사용하면 앱에서 네트워크 대역폭과 시스템

velog.io

 

 

 

 

728x90

'앱 개발 > Kotlin_Android' 카테고리의 다른 글

검색 결과 화면을 유지하기  (0) 2024.06.25
DTO, DTA, Entity  (0) 2024.06.21
Process, Thread  (0) 2024.06.13
MVVM 패턴 사용 이유  (0) 2024.06.11
Android 4대 컴포넌트  (0) 2024.06.07