왕현성
코딩발자취
왕현성
전체 방문자
오늘
어제
  • 코딩 (277)
    • Python (71)
    • Java (16)
    • MySQL (34)
    • 인공지능 (48)
      • 머신러닝 (16)
      • 딥러닝 (32)
    • 영상처리 (4)
    • Rest API (21)
    • Android Studio (25)
    • streamlit (13)
    • DevOps (22)
      • AWS (9)
      • PuTTY (5)
      • Git (4)
      • Serverless (2)
      • Docker (2)
    • IT 기술 용어 (6)
    • 디버깅 ( 오류 해결 과정 ) (17)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • encoding='utf-8'
  • 의료이미징
  • 영상처리
  • tune()
  • 딥러닝
  • 컴퓨터비전
  • ComputerVision
  • 비지도학습
  • alibidetect
  • get_long_description
  • pytorch
  • ckpt_file
  • matplotlib
  • 기상탐사
  • numpy
  • labelme
  • PYTHON
  • imageprocessing
  • unsupervised
  • UnboundLocalError
  • labelme UnocodeDecodeError
  • TensorFlow
  • 영상처리역사
  • OpenCV
  • pip install labelme
  • yolov8
  • alibi-detection
  • 영상기술
  • PIL
  • maskimage

최근 댓글

최근 글

티스토리

250x250
hELLO · Designed By 정상우.
왕현성
Android Studio

Android - recyclerView 페이징 처리 (recyclerView.addOnScrollListener)

Android Studio

Android - recyclerView 페이징 처리 (recyclerView.addOnScrollListener)

2023. 2. 8. 12:34
728x90

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

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

자세한 사항은 아래의 깃허브에서 확인 가능합니다.

 

// todo : 깃허브 주소 입력

 

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

  • onScrollStateChanged : 스크롤의 상태가 변경 되었을 경우 1번 실행, 앱을 간소화 할 때 사용
  • onScrolled : 스크롤 될 때 실행, 즉 반응형으로 코드를 작성 할 수 있음
       // 스크롤
        recyclerView.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)recyclerView.getLayoutManager()).findLastCompletelyVisibleItemPosition();
                int totalCount = recyclerView.getAdapter().getItemCount();

                // 스크롤을 데이터 맨 끝까지 한 상태
                if(lastPosition+1 == totalCount){
                    // 네트워크 통해서 데이터를 받아오고 화면에 표시한다!
                    addNetworkData();
                }

            }
        });

 

 

addNetworkData();

 

네트워클 통해서 데이터를 받아오고 화면에 표시하는 함수

private void addNetworkData(){

        // 유튜브 API 호출
        RequestQueue queue = Volley.newRequestQueue(MainActivity.this);



        String URL = Config.BASE_URL + Config.PATH + "?key=" + Config.API_KEY + "&part=snippet&q=" + keyword + "&maxResults=20&pageToken="+pageToken;


        JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, URL, null,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {

                        progressBar.setVisibility(View.GONE);

                        try {

                            pageToken = response.getString("nextPageToken");

                            JSONArray items = response.getJSONArray("items");


                            for(int i=0;i<items.length();i++){

                                // 네트워크 데이터 파싱작업
                                JSONObject item = items.getJSONObject(i);
                                String videoId = item.getJSONObject("id").getString("videoId");
                                String title = item.getJSONObject("snippet").getString("title");
                                String description = item.getJSONObject("snippet").getString("description");
                                String mediumUrl = item.getJSONObject("snippet").getJSONObject("thumbnails").getJSONObject("medium").getString("url");
                                String highUrl = item.getJSONObject("snippet").getJSONObject("thumbnails").getJSONObject("high").getString("url");

                                // 위에서 파싱 후 변수로 저장후에 객체생성
                                Video video = new Video(videoId,title,description,mediumUrl,highUrl);

                                // recyclerView에 보여주기위해 ArrayList에 저장
                                videoList.add(video);


                            }

                        } catch (JSONException e) {
                            return;
                        }


                        adapter.notifyDataSetChanged();

                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

                progressBar.setVisibility(View.GONE);

            }
        });

        progressBar.setVisibility(View.VISIBLE);
        queue.add(request);

'Android Studio' 카테고리의 다른 글

Android - 네트워크 통신 Retrofit2 Library  (0) 2023.02.09
Android - ProgressDialog  (0) 2023.02.09
Android - Intent 활용 - 주소록, 웹페이지, 메시지, 이메일  (0) 2023.02.07
Android - 이미지 처리 Library Glide  (0) 2023.02.07
Android - 액션바 타이틀, Back 버튼 설정법과 / FAB(FloatingActionButton) 사용법  (0) 2023.02.06
  • 1. 리사이클러 뷰의 스크롤링 메소드
  • addNetworkData();
'Android Studio' 카테고리의 다른 글
  • Android - 네트워크 통신 Retrofit2 Library
  • Android - ProgressDialog
  • Android - Intent 활용 - 주소록, 웹페이지, 메시지, 이메일
  • Android - 이미지 처리 Library Glide
왕현성
왕현성
AI 머신비전 학습일지

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.