오랜만에 UI 코드에 손 대다가 RecyclerView에 무한 스크롤링 기능을 넣어야했습니다. CodePath를 보니 RecyclerView.OnScrollListener를 상속하여 복잡한 계산을 한  EndlessRecyclerViewScrollListener.java가 소개되어 있습니다.[CodePath Endless scrolling page 링크


좀 더 심플한 방법이 있을것 같아 RecyclerView JAVADOC 문서를 좀 보고 다른 블로그도 보았지만. 전 아래와 같은 해결책을 CodePath에 추가했습니다.[CodePath에 추가한 글 링크] RecyclerView에서 main thread 점유는 최소화 하는게 좋아서 최대한 스크롤링에 대한 계산을 별도로 안하는 걸 고민 하다가 RecyclerView.Adapter.onBindViewHolder()를 이용했습니다. 한번 써보시고 이상하시면 답글 달아주세요. 테스트 해보니 딱히 문제는 없지만, fine tuning 하시려면 if(position == getItemCount() - 1) 에서 1을 변경해야 할 것 같습니다. RecyclerView에 보여지는 각 뷰의 크기에 따라 1을 3으로 변경하던지 다른 값으로 변경해서 fine tunig 하세요. (전 아래와 같이 글을 올렸는데 CodePath 담당자가 문장을 좀 바꾸었군요ㅋ)


Instead of using EndlessRecyclerViewScrollListener.java introduced in the following section. There's more simple and less computational way to implement endless scrolling. Make use of the following code snippet for endless scrolling.

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
  EndlessScrollListener endlessScrollListener
  
  ...
  public void setEndlessScrollListener(EndlessScrollListener endlessScrollListener) {
      this.endlessScrollListener = endlessScrollListener;
  }
  
  @Override
  public void onBindViewHolder(MyAdapter.ViewHolder holder, int position) {
      final Data data = dataset.get(position);

      // you can cache getItemCount() in a member variable for more performance tuning
      if(position == getItemCount() - 1) {  
          if(endlessScrollListener != null) {
              endlessScrollListener.onLoadMore(position);
          }
      }

      ...
  }
  
  @Override
  public int getItemCount() {
      if(dataset == null)
          return 0;
      else
          return dataset.size();
  }
  ...
  
  public interface EndlessScrollListener {
      /**
       * Loads more data.
       * @param position
       * @return true loads data actually, false otherwise.
       */
      boolean onLoadMore(int position);
  }
}


'android' 카테고리의 다른 글

Firebase  (0) 2016.06.11
Android N Preview 대응  (0) 2016.06.04
ButterKnife를 왜 쓰냐구요?  (0) 2016.02.29
뭐? 이벤트? 버스 태워 보내! #2  (0) 2016.02.29
뭐? 이벤트? 버스 태워 보내! #1  (0) 2016.02.29
Posted by 제이제이랩
,