일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- retrofit2
- 메모리릭
- 제플린
- 클린아키텍쳐
- #리사이클러뷰 어댑터
- #리사이클러뷰
- #안드로이드
- 리사이클러뷰 체크박스
- zeplin
- #안드로이드 개발자 #안드로이드 신입 #개발자 이직 #안드로이드 면접 #신입 개발자
- 안드로이드 메모리릭
- 키스토어
- 구글맵안돼요
- 안드로이드 아키텍쳐
- 레트로핏
- #android #안드로이드 #glide #gif #이미지다운로드
- 안드로이드
- 빗버킷 #bitbucket #authorization failed #깃
- 사용법
- retrofit
- 안드로이드 익명클래스
- #SMS API #안드로이드 SMS #SMS Retriever
- 안드로이드해상도
- #ContentProvider #App DataShare
- MVVM
- retrofi
- Today
- Total
땀이 삐질삐질 나는 개발 일기
[Recyclerview Paing] 기본 리사이클러뷰 페이징 처리 Feat.Rx 본문
안녕하세요. 삐질삐질 개발하는 개발자 삐질입니다
굉장히 오랜만에 포스팅 하는 것 같습니다.
바로 본론으로 들어가서, 오늘 소개해드릴 Tip은 우리가 흔히 쓰는 리사이클러뷰를 통해
Remote(server) API를 요청후 결과값을 리스트에 뿌려주는 과정에서, 너무 많은 데이터를 한번에 불러올 수 없기 때문에
- 너무 많이 불러오면 서버 과부하..
페이징 처리가 된 API와, 그에 맞게 호출하여 결과를 리스트에 추가해주는 방법을 알아보겠습니다.
사실 다른 부분은 크게 중요치 않습니다. 아래 코드가 전부라고 봐도 무방할 정도입니다.
하지만 이렇게 가벼운 설명으로 끝내면 너무 정이 없죠?
기본적인 흐름은 아래와 같습니다.
1. Page의 속성을 담당할 entity클래스가 있습니다. 이 클래스는 요청할 페이지와, 한번에 요청할 아이템의 갯수를 저장하는 클래스입니다.
위 클래스는 각 프로퍼티를 보관하고 있고, plusPage라는 page value를 1씩 증가시키는 펑션을 담고 있습니다.
2. 페이징 API의 기본적으로 요구하는 params는 위와 같이 page, size가 있습니다.
3. 해당 value들로 하여금 API를 request하여 List를 받고, adapter item에 add를 해주게 됩니다.
4. 그러면 한 페이지 분의 list가 리사이클러뷰에 셋 되겠지요?
여기부터가 페이징의 시작
5. 페이징을 하기 위해서는 , 언제? 다음 페이지를 호출 할 것인가를 알아야하고, 저는 scrollListener를 이용해, 가장 아래에 스크롤이 도달했는지 여부를 검사했습니다.
6. 이렇게 canScrolLVertically(-1) 펑션의 리턴이 true일 때, 최하단에 스크롤이 갔다는 사실을 알고, 다음 동작을 호출하게 됩니다.
7. 이때 scrollObserver는 더 아래에서 설명하도록 하겠습니다.
8. 다음 페이지를 호출하는 내용은 아래와 같습니다.
9. pageEntity의 plusPage를 호출함으로써 pageEntity가 가진 page의 속성을 +1 시켜준 뒤,
10. 다음 API를 호출합니다. 그후 받은 결과값을 다시 adatper item에 addAll시켜주고 notify를 해주면 끝이나게 됩니다.
-----------------------------------------
여기에 사용된 scrollObserver라는 것은, 이 scrollListener는 바닥에 닿을때 마다 해당 리스너가 불리우기 때문에 한 번에 여러개의 Api가 호출되는 불상사가 있을 수 있습니다. 이때 중복이 되는 부분을 걸러주기 위한 observer인데 ,
이때 사용한 기법으로는 Rx쪽의 throttleFirst라는 첫번째 신호가 들어온 뒤 , 지정된 시간동안 들어오는 처음 신호 이후의 신호를 싹 무시해버리는 기법입니다.
이것에 대해서는 Rxjava,RxKotlin의 throttle이라는 부분에 대해 공부하시면 좋습니다.
(사실 이 부분 없어도....크게 상관은 없습니다 만, 디테일하게 정확하게 처리하고 싶은 분은 추천 드립니다.)
단지 이 장에서는 기법만을 소개하기 때문에 최선의 방법 보다는, 기본적인 개념을 위한 설명으로 이해해주시면 감사하겠습니다.
rx를 사용하지 않고, 난 그냥 어찌됐던 최 하단이면 api를 호출하고 싶다 라고 하신 다면, scrollObserver.onNext(true)를 호출하는 대신,
바로 그 자리에서 pluspage()와 다음 API를 호출하여 작업하시면 됩니다.
또한, PageAdapter , ListAdapter를 활용한 방법들도 있지만, 굳이~나는 이런것들말고 기본 Reyclerview로 만들고 싶다 하시는 분께 추천드립니다. 차후 위의 어댑터들로 구성하는 방법들도 포스팅 하도록 하겠습니다.
- 이상 -
해당 예제 소스
BasicCode/RecyclerviewPagingSample at master · jaekanglee/BasicCode (github.com)
jaekanglee/BasicCode
코드분리 하는 습관을 예시로 들기위한 프로젝트, 기본적으로 MVC를 가져간다 . Contribute to jaekanglee/BasicCode development by creating an account on GitHub.
github.com
초보 안드로이드 개발자 단톡 방
https://open.kakao.com/o/gn4xqQ6open.kakao.com/o/gH0XvThcopen.kakao.com/o/gH0XvThc
카카오톡 오픈채팅
open.kakao.com
'개발 Tip' 카테고리의 다른 글
[Android] WifiDebug 스크립트로 한 큐에! (2) | 2023.06.13 |
---|---|
BitBucket Authorization failed ( passwd invalid)일떄 (0) | 2021.05.03 |
초보 카카오톡 오픈 채팅방 URL이 변경되었습니다. (0) | 2021.04.06 |
[안드로이드]요즘 핫한 안드로이드 Mvvm 패턴을 공부하는 것.. (4) | 2020.08.26 |
DI(Dependency Injection)이란? 맛만 이라도 보자! (0) | 2020.06.03 |