마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

뷰페이저2 페이징 관련

0 추천
뷰페이저2에 페이징3에 페이징어댑터 했다가 이런저런 문제 때문에 리사이클러뷰어댑터에 페이징3안쓰고 자체적으로 포지션이 끝일때 다음 페이지 또는 이전페이지 api를 호출해서 더해주려고합니다 문제는
1.다음페이지api reponse는 가져오고 이걸 어레이리스트에 담고 notifydatasetchange해도 동작하질 않습니다 처음에 5개 가져오고 다음페이지 호출하면서 5개 가져왔으면 총 10개로 해서 notify하려는데 먹질않습니다

2. 1번문제를 해결한다했을때 이전페이지를 어떻게 어레이리스트에 담아야할지 모르겠습니다 앞부분에 끼어넣어야 되는데..
수원통학러 (3,570 포인트) 님이 2022년 2월 5일 질문
어떻게 처리했는지 관련 코드를 올려보세요. 단순 설명만으로는 어디가 문제일지 알 수 없어요.
오픈톡방으로 한번 가능할까요? 일단여기에 한번 일부를 올려볼게요
뷰페이저를 페이징 처리하는 이유가 있나요? 그냥 전체 아이템을 가져와서 한번에 뷰페이저 어댑터에 넣어주면 될 것 같은데요. 뷰페이저를 위처럼 처리하시면 복잡도만 증가할 것 같아 보이는데요.
아아닙니다.. 제가 잘못한게 하나 있어서 동작이 안됐었네요
일단 저도 처음에 전체아이템을 가져오고 싶었는데,
만약에 1000개의 아이템이 있다쳤을때
api 리퀘스트파라미터가 페이지, 1페이지당 가져올갯수 등 있고, 그에맞게 리스폰스를 이미지 및 정보 이렇게 가져오는데요. 그러면 30개씩쳐도 30번넘게 api를 호출해야되지않나요..? 그럼 이거부터 부하가걸릴거라생각해서 이렇게해봤습니다
그렇군요. 정확하게 어떤 데이터를 가져오고 API가 디자인이 어떤지 몰라서 그렇긴 하지만, 한번에 가져올 수 있는 아이템 갯수를 크게할 수도 있고, Coroutine을 사용해서 parallel dispatch라는 기법을 사용하시면 여러 개의  API를 동시에 호출할 수 있습니다.

가령 PageRequest라는 요청값을 통해 페이징 데이터를 10개 페이지의 데이터를 가져온다고 하면,
아랫처럼 parallel dispatch를 통해 10개의 요청을 한번에 보내고 받을 수 있습니다. (api.fetchData는 PageResult라는 타입을 리턴한다고 가정)
val pagingResults: List<PageResult> = (1..10).map { pageNo ->
    async { api.fetchData(PageRequest(pageNo = pageNo)) }
}.awaitAll()
이렇게 하면 10개의 요청을 보내더라고 제일 오래걸리는 요청의 응답시간만큼만 걸리게 됩니다.

개인적인 생각으로는, 뷰페이저를 이용한 사용자 인터페이스는 어느정도 적은량의 데이터를 넘겨서 보기에 적합한 뷰타입이므로, 10000 개 정도의 데이터를 가져와야 하는 거라면 뷰페이저는 적합하지 않는 것 같아요.
기획도 이렇게 기획이 되있지만, 이게 쿠팡을 모티브로해서? 기획이된거라서요
쿠팡이 어떻게 구현을 해놨는지 모르겠지만.. 약간 뷰페이저를 이용한것같더라구요
2만개 리뷰가 있는 상품에서 좌,우스와이프 할때 사용자리뷰들이 이렇게 하나씩 나오던데 이런건 뭐로 구현했는지 궁금합니다..
스택오버플로우에 찾아보면 님이 겪고 있는 문제를 ViewPager2 + PagingLibrary3를 이용해 해결하려는 시도가 있는데, 잘 동작하는 해결방법은 없어 보이는 듯하네요.
https://stackoverflow.com/questions/64958908/how-to-go-to-a-position-with-view-pager-2-that-uses-paging-3-to-load-data
참고로 페이징소스에서 prevKey를 처리해주면 앞에 있는 페이지를 가져올 수 있을 것 같이 보이기는 하는데, 아직 사용해본 경험은 없어서 더 자세한 말씀은 못드리겠네요.

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...