Endless RecyclerView in Android using Android Studio – Kotlin

안녕 얘들 아, CodeAndroid의 Vignesh 이 비디오에서는 Android에서 Endless RecyclerView를 만드는 방법을 보여줍니다

이것은 RecyclerView와 함께 페이지 매김으로도 알려져 있습니다 이것을 증명하기 위해 "EndlessRecyclerView"라는 새로운 프로젝트를 만들고 있습니다 그 동안 에뮬레이터를 실행하고 응용 프로그램을 실행할 준비를 유지합니다 우리는 RecyclerView를 사용할 것입니다 그래서 우리의 의존성에 RecyclerView 라이브러리 추가하기

프로젝트를 동기화합시다 activity_mainxml을 엽니 다 여기에서 루트 레이아웃을 RelativeLayout으로 변경합니다 RecyclerView 추가하기 너비가 "match_parent"이고 높이가 "wrap_content"인 경우 RecyclerView에 대한 id를 recyclerView로 지정하기 처음에는 RecyclerView에 일부 데이터를로드합니다

그런 다음 다음 페이지 데이터를 가져 오기위한 API 호출을 호출합니다 그 때 우리는 진행률 표시 줄을 보여주고 싶습니다 따라서 ProgressBar의 너비를 "match_parent"로, 높이를 48dp로 추가하십시오 ProgressBar의 id를 "progressBar"로 지정 ProgressBar가 RecyclerView 아래에 있어야합니다 그래서 이것을 세로 형 LinearLayout 내부에 배치했습니다

이제 ProgressBar가 RecyclerView 아래에 정렬됩니다 RecyclerView 높이가 화면 높이와 같거나 클 때 progressBar가 사용자에게 표시되지 않습니다 그래서이 LinearLayout을 ScrollView로 감싸고 있습니다 죄송합니다 루트 RecyclerView가 필요 없습니다

그래서 나는 루트 레이아웃을 ScrollView로 변경하고 내부 레이아웃을 제거하려고합니다 우리는 레이아웃을 완료했습니다 "MainActivitykt"열기 RecyclerView 용 어댑터가 필요합니다 그래서 NumberAdapter라는 클래스를 생성합니다

RecyclerViewAdapter를 확장합니다 내부에서 ViewHolder를 전달해야합니다 NumberViewHolder라는 클래스를 생성합니다 RecyclerView

ViewHolder를 확장합니다 내부에서 인수를보기로 전달해야합니다 그래서 뷰를 클래스의 매개 변수로 추가합니다 이제 어댑터의 ViewHolder로 전달할 수 있습니다 누락 된 회원을 구현해 보겠습니다

onCreateViewHolder에서 ViewHolder 객체를 반환해야합니다 레이아웃 파일이 필요하다는 것을 만들려면 그래서 새로운 Resource 파일을 만들고 TextView처럼 루트 요소를 변경하십시오 파일 이름을 rv_child_number로 지정합니다 TextView 내부에서는 태그를 추가하지 않을 것입니다 그래서 같은 줄에 TextView를 끝내고 있습니다

TextView 높이를 "wrap_content"로 변경하고 여백을 16dp로 추가 마지막으로 id를 "tv_number" 뷰를 전달할 NumberViewHolder 내부를 반환합니다 그래서 LayoutInflater를 사용하여 rv_child_number 레이아웃을 팽창시키고 그것을 전달합니다 getItemCount에서 RecyclerView 크기를 반환해야합니다 그래서 문자열 목록을 저장하기 위해 numberList라는 전역 변수를 생성합니다 여기서는 activity 객체를 사용하여 목록에 액세스하고 크기를 반환합니다

NumberViewHolder 안에 TextView 객체를 추가해야합니다 그것을 tv_number에 연결해야하는 내부 onBindViewHolder 안에 tvNumber 텍스트를 다음과 같이 설정합니다 numberList의 첫 번째 항목 페이지 매김의 경우 페이지 번호가 필요합니다 기본적으로 나는 그것을 초기화하고있다 통신이 일어나고 있는지 여부를 확인하기 위해 isLoading이라는 플래그를 추가합니다

또한 한 페이지를 가져올 레코드의 수를 알려주는 limit가 필요합니다 스크롤을하는 동안 어댑터 및 layoutManager에 액세스해야합니다 그래서 나는 그 객체를 전역 변수로 만들고있다 layoutManager를 초기화하고 이것을 recyclerView의 layoutManager로 설정하십시오 네트워크 통신 조롱을 위해 getPage라는 함수 생성하기 내부가 numberList에 내용을 추가합니다

처음에는 0을 시작으로하고 싶습니다 페이지 -1에 한계를 곱하십시오 페이지에 한도를 곱하여 끝내기 시작과 끝 사이의 for 루프 실행 접두사가 "Item"인 numberList에 항목을 추가하면 Handler ()를 사용하여 5 초 지연 추가 어댑터가 초기화되었는지 여부를 확인하는 내부 초기화 된 경우 어댑터 객체에서 notifyDataSetChanged를 호출합니다 그렇지 않으면 어댑터 객체를 초기화합니다 그리고 그것을 recyclerView 용 어댑터로 설정하십시오

onCreate에서이 getPage ()를 호출합니다 이제 응용 프로그램을 시작합니다 앱을로드하는 동안 우리는 recyclerView에 대한 데이터가 없다는 것을 알 수 있습니다 5 초 후에 데이터가 recyclerView에 추가됩니다 progressBar가 연결이 발생할 때만 표시되기를 원합니다

VisPage 내부에서 VISIBLE로 표시되도록 가시성을 GONE으로 만드는 어댑터를 새로 고친 다음 이제 페이지 매김에 대해 알게 될 것입니다 recyclerView의 스크롤을 들으려면 OnScrollListener를 추가해야합니다 내부에서 RecyclerView 객체를 전달해야합니다 OnScrollListener OnScrolled라는 메서드 재정의 if (dy> 0) 즉, recyclerView가 세로로 스크롤 된 것을 의미합니다 내부 우리는 우리가 recycler의 바닥에 도달 한 날씨를 확인해야합니다

그렇게하기 위해서는 화면에 몇 개의 항목이 있는지 알아야합니다 최고 항목 위치 란 무엇입니까? 및 recyclerView 크기 layoutManager의 childCount를 사용하여 항목 수 표시하기 visibleItemCount라는 변수에 저장합니다 최상위 항목 위치 가져 오기 사용하기 findFirstCompletlyVisibleItemPosition을 pastVisibleItem이라는 변수에 저장합니다 마지막으로 어댑터에서 recyclerView 크기 가져 오기 total이라는 변수에 저장 isLoading이 false 인 경우 다음 페이지 데이터를 가져올 수 있습니다 내부 우리는 우리가 바닥에 도달했는지 여부를 확인해야합니다

visibleItemCount + pastVisibleItem이 total보다 크거나 같으면 그것이 사실이라면 우리는 바닥에 도달했습니다 그러면 다음 페이지 데이터를 얻을 수 있습니다 나는 한 페이지 수를 증가시키고 getPage를 호출한다 getPage 내부에서 isLoading을 true로 설정 처음에는 이 경우 네트워크 호출 후 5 초로 isLoading을 false로 만듭니다 이제 응용 프로그램을 시작합니다

처음 10 개 항목이 isLoading이고 progressBar가 진행되는 것을 볼 수 있습니다 하지만 다음 페이지를 호출하지 않습니다 왜냐하면 우리는 dy> 0을 주었기 때문입니다 여기서 스크롤은 일어나지 않습니다 그래서 우리는 계속 0으로 항상 염색합니다

이것이 우리가 두 번째 페이지 데이터를 얻지 못하는 이유입니다 그래서 나는 dy 상태를 언급하고있다 이제 응용 프로그램을 시작합니다 우리는 첫 번째 페이지 데이터를 얻고 있습니다 5 초 후 두 번째 페이지 데이터가 표시됩니다

우리가 recyclerView를 스크롤하여 아래쪽에 도달하면 다음 페이지 데이터를 가져 오는 중입니다 이와 같이 사용자가 recyclerView의 맨 아래에 도달하면 더 많은 데이터를로드 할 수 있습니다 이 비디오 녀석을위한 전부입니다 나를지지하고 싶다면 wwwpatreon

com/codeandroid에서 후원자가되어 당신을 도울 수 있습니다 너가 좋아하길 바래 내 다음 비디오에서 뵙겠습니다 좋은 하루 되세요