Android(Java) - 리사이클러 뷰의 스크롤링 기능 구현하기 (리싸이클러뷰 페이징)

해당 소스 코드는 리사이클러 뷰의 스크롤의 설명을 위한 코드입니다.

어댑터 구성과, 자세한 리사이클러 뷰의 구현은 생략되었습니다.

자세한 사항은 아래의 포스팅에서 확인 가능합니다.

https://luvris2.tistory.com/275

 

RecyclerView Adapter - 리스트를 화면에 출력하기

아래의 예제 앱은 깃허브에서 확인 가능합니다 https://github.com/luvris2/Android-RecyclerViewTest-App GitHub - luvris2/Android-RecyclerViewTest-App Contribute to luvris2/Android-RecyclerViewTest-App d..

luvris2.tistory.com


리사이클러 뷰의 스크롤링 메소드

  • onScrollStateChanged : 스크롤의 상태가 변경 되었을 경우 1번 실행, 앱을 간소화 할 때 사용
  • onScrolled : 스크롤 될 때 실행, 즉 반응형으로 코드를 작성 할 수 있음
// 스크롤 관련 이벤트 리스너
rv.addOnScrollListener(new RecyclerView.OnScrollListener() {
    @Override // 스크롤의 상태가 변경 되었을 때
    public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
        super.onScrollStateChanged(recyclerView, newState);
        // 실행 코드 작성
    }

    @Override // 스크롤 됐을 때
    public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
        super.onScrolled(recyclerView, dx, dy);
        // 실행 코드 작성
    }
});

리사이클러 뷰의 스크롤이 마지막 일 경우 스크롤 기능 추가

  • 전체 소스 코드
// 리사이클러뷰, 어댑터 객체 생성 및 설정
RecyclerView rv;
TestAdapter adapter;
rv = findViewById(R.id.rv);
rv.setHasFixedSize(true);
rv.setLayoutManager(new LinearLayoutManager(MainActivity.this));

// ...

// 데이터를 입력 후(예시:DataList) 어댑터 생성
adapter = new TestAdapter(MainActivity.this, DataList);
rv.setAdapter(adapter);
adapter.notifyDataSetChanged();

// 리스트가 마지막까지 스크롤 될 때 이벤트
rv.addOnScrollListener(new RecyclerView.OnScrollListener() {
    @Override
    public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
        super.onScrollStateChanged(recyclerView, newState);
    }

    @Override
    public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
        super.onScrolled(recyclerView, dx, dy);
        // 리스트의 행 정보 저장
        int lastPosition = ((LinearLayoutManager) rv.getLayoutManager()).findLastCompletelyVisibleItemPosition();

        // 리스트의 총 행의 갯수 확인
        int totalCount = rv.getAdapter().getItemCount();

        // 리스트의 마지막에 도달 할 경우, 인덱스(Position)는 0부터 시작이므로 +1
        if ( lastPosition+1 == totalCount ) {
            // 리스트의 마지막의 경우 실행 될 코드 작성
        }
    }
});