안드로이드

[Android] AAC의 Paging을 사용하지 않고 Paging 처리 하기

Black.bean 2021. 5. 29. 20:25

개요

안드로이드에서 페이징 처리를 하기 위해선 AAC의 Paging 라이브러리를 활용하여 처리한다. 과거에는 이런 라이브러리가 존재하지 않았는데 이런게 없었다면 어떻게 처리해야 할까?

 

요약

리사이클러뷰에 ScrollListener를 부착하여 스크롤을 감지하고 스크롤이 끝에 도착하여 더 이상 움직일 수 없는지 확인하고 싶다면 canScrollVertically 메서드를 사용하면 된다. 추가로 더 정확성을 높히기 위해서 RecyclerView에 부착된 레이아웃 매니저에서 findLastCompletlyVisibleItemPosition() 메서드를 활용하여 마지막에 보이고 있는 아이템의 포지션을 갖고 온 뒤, 지금까지 노출 된 총 아이템 수와 같은지 비교하면 더 정확하다.

 

구현 예시

recyclerView.addOnScrollListener(object : RecyclerView.OnScrollListener() {
    override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
        super.onScrolled(recyclerView, dx, dy)
 
        val lastVisibleItemPosition =(recyclerView.layoutManager as LinearLayoutManager)
        	.findLastCompletelyVisibleItemPosition()
        val totalCount = recyclerView.adapter!!.itemCount-1
        
        if (!recyclerView.canScrollVertically(1) && lastVisibleItemPosition==totalCount-1) {
 	    //스크롤이 끝에 도달할 경우[canScrollVertically(최하단:1 or 최상단:-1)]
            //&& 마지막 아이템일 경우(lastVisibleItemPosition==totalCount-)
            
        }
    }
})

UX를 향상시키려면 네트워킹 과정에서 ProgressBar를 보여주면 더 좋을 것 같다. 실제 데이터를 가져오는 작업은 마지막 아이템 offset을 저장한 뒤, RxJava를 활용하여 현재 offset에 해당하는 청크를 요청하고 요청 시작 시점에 ProgressBar를 호출하고 작업 완료 시 ProgressBar를 안 보이게 처리하면 될 것 같다.