본문 바로가기

안드로이드

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

개요

안드로이드에서 페이징 처리를 하기 위해선 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를 안 보이게 처리하면 될 것 같다.