안드로이드 RecyclerView가 view를 보여줄 상태가 완료된 시점 알아내기
안녕하세요. 개발자 드리머즈입니다.
안드로이드에서 RecyclerView를 사용하고 있는데 화면에 RecyclerView에서 목록으로 보여주는 View가 모두 보여질 상태가 완료된 시점을 파악하는 것이 필요했습니다.
설명이 좀 어려운데 예를 들어 설명하겠습니다.
RecyclerView에서 보여줄 데이터의 갯수에 따라서 한 화면에 한번에 보여줄 수도 있고(좌측 그림) 아니면 스크롤을 해야 전체 데이터를 볼 수도 있습니다. 이 두 경우를 구별할 방법이 필요했습니다. 다행히 LayoutManager(일반적으로는 LinearLayoutManager)에서 getChildCount()함수를 통해 recyclerView에 보여지고 있는 item의 갯수를 알 수 있고 getItemCount()함수를 통해 전체 item의 갯수를 알 수 있습니다.
문제는 이 두 함수를 원하는 시점에 호출하기가 어려웠다는 점입니다. 만약 RecyclerView의 item 총 갯수가 9개라고 하면 RecyclerView가 실행되면서 getChildCount()값은 0에서부터 1씩 증가합니다. 화면이 작아서 한 번에 4개의 item만 보여줄 수 있다면 getChildCount()함수의 리턴값은 4에서 멈춥니다. 그래서 이 시점에 getChildCount() 값과 getItemCount()을 조사하면 한 번에 화면에 보여줄 수 있는 item의 갯수보다 많은지 아니면 적은지 알 수 있습니다. 그런데 이 시점을 찾기가 어려웠습니다.
RecyclerView나 RecyclerView.Adapter에 이 시점에 불리는 콜백 함수가 당연히 있겠지 하고 찾아봤지만 없었습니다. 스택오버플로우를 찾아봐도 명확하게 원하는 답을 찾지 못했습니다.
삽질을 좀 하다가 알게됐는데 문제가 되는 이 시점에 LayoutManager의 onLayoutCompleted()함수가 호출됩니다.
그래서 이 시점을 알기 위해서는 아래와 같은 방식으로 onLayoutCompleted()함수를 override해주면 됩니다. 이 함수가 호출될 때 getChildCount()와 getItemCount()값을 조사하면 됩니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | mLayoutManager = new LinearLayoutManager(getActivity().getApplicationContext()){ @Override public void onLayoutCompleted(RecyclerView.State state) { super.onLayoutCompleted(state); int childCount = getChildCount(); //지금 recyclerView 영역에 보이고 있는 아이템의 갯수 int itemCount = getItemCount(); //전체 갯수 if(childCount == itemCount){ //한 화면에 보여줄 수 있는 item갯수보다 적은 갯수를 가지고 있음 }else{ //한 화면에 보여줄 수 있는 item갯수보다 많은 갯수를 가지고 있음 } } }; | cs |
댓글 영역