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 ) {
            // 리스트의 마지막의 경우 실행 될 코드 작성
        }
    }
});
반응형