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

뷰페이저2 + 페이징3 이전을 아는 방법?

0 추천
3열 n행 그리드뷰로 이미지들이 있는 A액티비티가 있을때, 그중 한개를 누르면 B액티비티로 이동, 그 사진 및 리뷰를 보여줍니다.

뷰페이저로 해서, 좌, 우로 스크롤하면 좌면 당연히 이전리뷰, 우면 다음 리뷰를 보여줘야되는데요.

만약 1행 2열 사진을 눌렀을때, b액티비티에서 api 호출해서 다음 페이징할 갯수를 가져오면 된다고 생각이 드는데,

1행 1열은 어떻게 가져와야되는걸까요..? 쿠팡처럼 구현하려고합니다
수원통학러 (3,470 포인트) 님이 2022년 2월 4일 질문

1개의 답변

0 추천
쿠팡앱은 본 적이 없어서 모르겠는데, 페이징은 변경이 안되어야 할 것 같아 보이는데요. 다만 선택한 이미지의 위치를 찾아서 시작 페이지를 설정하는게 맞지 않을까요?
spark (224,220 포인트) 님이 2022년 2월 4일 답변
A액티비티에서 서버에서 데이터를 가져올 때의 파라미터와 선택한 아이템의 위치를 B액티비티에 전달해 주고, 이걸 바탕으로  cache나 서버에서 데이터를 가져오는 방법을 한번 생각해 보시죠. 파라미터 대신 A액티비티에서 사용했던 데이터를 공유할 수도 있겠네요.
리스트를 뷰페이저에 있는 페이징어댑터로 넘겨서 다가져오긴 하는데 문제는
이전을 가져올 방법을 모르겠습니다..
onbindviewholder에 있는 파라미터 position이 val이라서 변경도 안되고,
setcurrentitem으로 하면 첫번째거로 들어가고, 어댑터에 pos 변수 하나둬서 거기서
onbindviewholder에 그 포지션을 세팅해도 문제는 이전으로 갈방법을 모르겠습니다
B액티비티에서도 1행 2열이 아니라 3열 n행의 데이터를 모두 가져오셔야 겠죠? 그리고 뷰페이져2에서는 프레그먼트를 안써도 되는 경우라면 그냥 RecyclerView.Adapter를 사용하시면 됩니다.
페이징어댑터 쓴이유는 일단 api콜1번할때 20개씩 가져오는데 슬라이드할때마다 이걸 가져오려고 썻구요 많게는 100개가 그냥넘어가서요.. 클릭시 포지션을 어댑터에 세팅해줬는데 바인드뷰홀더가 먼저타버리면서 세팅이 안되네요 방법이없을까요? 다음은 문제가없는데 이전이안되네요
0번포지션부터시작하면 문제가없지만 중간누르면 이전가져올방법이 없어요 뷰페이저포지션이 0으로되서 왼쪽슬라이드도안되구요
기본적으로 둘 중의 하나의 접근방법을 사용하셔야 될 것 같은데요
A액티비티에서 데이터를 가져올 때 repository같은 데 캐시를 해서 3열 n행의 데이터를 보관하세요. B 액티비티에서 뷰페이저를 만들 때 캐시를 기반으로 만드세요. 뷰페이저에서 100개 넘어가도 문제가 없어요. 테스트 해보시면 압니다. 더군다나 RecyclerView.Adapter기반이라 뷰를 재사용하도록 디자인 되어 있습니다.
캐시를 적용하기 싫다면 A에서 선택한 아이템이 몇 번째 페이지에 해당하는 아이템인지 계산해서 B에서 페이지를 이동에 따라 동적으로 앞 뒤의 페이지를 불러와서 처리를 하셔야 겠죠? 당연히 첫번째보다는 많이 복잡해지겠죠. 이미 데이터를 가져왔는지 확인해야 하는 등의 로직을 넣으셔야 겠죠.
어떤 방법이든 시작 포지션에는 상관이 없다고 보입니다. 현재는 뷰페이저에 A 에서 눌린 행의  데이터만 넘겨서 처리하려고 하시니까 문제가 되는 것 같아요.
...