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

Paging3에서 recyclerView Item update 하는법

0 추천
안녕하세요 paging3으로 recyclerView 처리를 하고있습니다.

recyclerView는 관리자 게시물로 게시물을 수정, 변경 등 할 수 있는데요

게시물을 수정, 변경을 하면 바로 변경이 일어나는게 아니라 나갔다 들어와야 적용되는걸 확인 할 수 있었습니다.

paging은 recyclerView Adapter와 다르게 update할려면 room을 사용해야한다 고 알고 있는데 그관련 예제가 없는 것 같아 도움이필요합니다.

감사합니다
hifl (670 포인트) 님이 2021년 8월 31일 질문
게시물을 저장할 때 서버 API를 호출하시나요? 이 경우라면  PagingAdapter.refrefsh() 를 호출해 보세요. 데이터를 갱신하도록 되어있습니다. refresh가 원하시는게 아니라면 다시 API를 호출하도록 해주면 됩니다.
안녕하세요 혹시 다시 API를 호출하라는말이 pagingData를 호출하라는 말인가요??
PagingSource는 Flow 를 사용하기 때문에 refresh 를 호출하면 데이터를 다시 갱신하도록 되어 있습니다. Paging Library를 사용하신다면 이 방법으로 거의 해결이 되리라 생각하는데, 그게 안된다면, Flow를 Cancel하시고  다시 collect하시면 될 것 같습니다.
room을 써야 refresh가 적용되는게 아닌가요 ??
말씀하사는 내용은 Room Database에서 Flow 를 지원하기 때문입니다.  일반적인 함수도 Flow 를 리턴한다면 Room과 같이 똑같이 변경사항에 대한 이벤트를 받을 수 있습니다. 이미 Paging Library3에서는 PagingSource를 통해 이 부분이 지원되구요. 단지 데이터 갱신을 위해 Room를 사용한다는 것은 적합하지 않아 보입니다.
제가 데이터 갱신만을 위해 room을 사용하고 있는데 뭔가 잘 안되더라고요. room 을 안쓰려고 한다면
 job?.cancel()
            job= lifecycleScope.launch {
            pagingViewModel.pendingData.collectLatest {
                pendingAdapter.submitData(viewLifecycleOwner.lifecycle, it)
            }
            }
이런식으로 해야 하나요? ㅠㅠ
자꾸 물어봐서 죄송합니다. 이번에 paging3을 처음써봐서 구글링을 하는데 여러정보를 한꺼번에 접하느라 너무헷갈리네요 ㅠㅠ
자꾸 물어봐서 죄송합니다. 이번에 paging3을 처음써봐서 구글링을 하는데 여러정보를 한꺼번에 접하느라 너무헷갈리네요
adapter.refresh()는 시도 안해보셨나요? 제일 먼저 해볼 수 있는 옵션인데. 그리고 강제로 flow를 다시 collect하는 건 올리신 코드가 맞아 보입니다.
해봤습니다. 하지만 job = lifecycleScope.launch {

                        pagingViewModel.rejectData.collectLatest {
                            rejectAdapter.submitData(it)
                            Log.d(TAG, "getPost: $it")
                        }
                        if(args.data== REJECTED){
                            job?.cancel()
                            rejectAdapter.refresh()
                        }
                    }
이런식으로 했는데 안되는것 같아요
그게 안되는 경우는 서버 쪽의 API가 페이징을 제대로 지원하는지, PagingSource에서 페이지 처리를 제대로 하셨는지 다시 체크를 해보세요. 저도 회사 앱에 두군데 정도 사용 중인데, 데이터를 다시 가져오는데는 별문제가 없거든요.
pagingViewModel.rejectData.collectLatest {
                            rejectAdapter.submitData(it)
                            Log.d(TAG, "getPost: $it")
                        }
                        if(args.data== REJECTED){
                            job?.cancel() // -> 여기 처럼 cancel 을 하시게 되면 flow를 다시 collect하도록 만드셔야 데이터를 계속 받을 것 같은데요. cancel이 불필요해 보여요.
                            rejectAdapter.refresh()
                        }
rejectAdapter.refresh() 로 됐는데 바로 되는게 아닌 수정하고 다시 다이어로그가 되어야 그때서야 업데이트가 되더라고요. 이건어떤 문제일까요?
/okhttp.OkHttpClient: <-- HTTP FAILED: java.io.IOException: Canceled 이렇게뜨네요
글쎄요.  PageSource와 Pager를 사용하는 부분을 잘 확인해 보셔야 할 것 같은데요. refresh의 경우는 PageSource에 현재의 위치에 대한 처리가 필요할 거예요. 증상만으로는 경우의 수가 많아서 정확한 이유는 말씀드리기가 어렵네요.
제가 fragment에서 dialogFragment으로 이동하고 DialogFragment -> fragment로 이동할때 dialog?.hide()하면 안뜨는것같네요
dialog?.hide()를 감추는 거고 dialog?.dismiss는 화면에서 제거하는 거니까 그럴 수 있겠네요. dialog?.hide()는 사용해 보질 않아서 다른 문제가 있는지는 잘 모르겠네요.

답변 달기

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