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

아래 질문과 이어서..

0 추천

아래에 중첩 리사이클러뷰를 사용해야하는데 어댑터내에 어댑터를 사용해야하는지에 관한 글과 관련하여

질문들비니다.

질문하기 앞서 다시 기능을 간략하게 말씀드리면

사진은 리사이클러뷰의 아이템이고, 그 속에 다시 상세 정보를 표시하는 두번째 리사이클러뷰를 표시할 예정입니다. 메인 리사이클러뷰와 서브 리사이클러뷰라고 칭하겠습니다.

메인 아이템과 서브아이템 둘다 동적으로 생성 및 삭제 가능합니다. 단 서브 아이템은 메인 아이템 속의 아이템이니 메인아이템이 존재해야만 존재하겠죠.

 

사실 예전에도 비슷한것을 질문드렸던것 같긴한데 다시 하려니 헷갈려서 질문드립니다.

만약에 중첩 리사이클러뷰를 사용하게 되어 메인 어댑터내에 서브 아이템을 위한 서브어댑터를

사용해야한다면,

이 서브 어댑터는 onCreateViewHolder() onBindViewHolder()중 어디서 setAdapter()를 해야하나요?

 

리사이클러뷰에서 setAdapter()는 최초 1회만 진행해 주는것이라 들었습니다.

예제 샘플을 찾아봐도 비슷한 예제 모두 onBindViewHolder에서 서브리스트를 setAdapter 해주던데.

이유를 잘 모르겠습니다.

onBindViewHolder는 리사이클러뷰 특성상 스크롤이 길어지거나하게되면

ViewHolder를 재활용하게 될때 호출됩니다..

그럼 onBindViewHolder()에서는 또 setAdapter()하겠죠.

매번 이런식으로 setAdapter가 호출이 될텐데. 최초 1회만 호출해주는 것이 좋다는 것과는 

영 반대인 상황이 나오게됩니다. 이것이 지극히 정상적인 상황인가요?

onCreateViewHolder에서 메인 리스트의 ViewHolder를 생성할때 같이 서브리스트를 setAdapter() 하면

안되는건가요?

 

어차피 저는 동적으로 아이템을 생성하는 상황이라, 메인 아이템을 생성할 때마다

onCreateViewHolder가 호출될것같은데, 여기다가 setAdapter를 하면 안되는 것인지 궁금합니다.

 

 

 

++) 번외로 위에 질문 다해놓고 이런 질문하는것이 이상하지만.. 원래 이런 중첩 리사이클러뷰를할때

메인 리스트의 각각의 아이템에 대해서 어댑터를 가지는것이어야하나요?

codeslave (3,940 포인트) 님이 2021년 7월 20일 질문
RecyclerView는 ViewHolder를 재사용합니다. 예를 들어 1번째 ViewHolder와 10번째 ViewHolder가 같은 인스턴스라면 onCreateViewHolder에서 setAdapter를 하게 될 경우 어떤 일이 생길까요? 이 경우 10번째 ViewHolder는 1번째 Adapter에 들어가 있는 데이터를 보게될 것 같은데요.될 겁니다.
한가지 궁금한게 있는데, 서브 아이템의 갯수가 많나요? 보통 10개 정도라면 RecyclerView를 굳이 쓰지 않아도 될 것 같은데요. 아이템을 Edit하는데는 RecyclerView가 별로 편리하지 않거든요. 중첩으로 사용할때 레이아웃에 따라 스크롤 문제도 있고.
메인아이템, 서브아이템 둘다 동적으로 생성하기떼문에 사용자에 따라 많을수도 있고 적을스도 임ㅅ어요..
리사이클러뷰는 사이즈가 변하게 될 경우 리스트를 갱신하는 것으로 알고 있습니다. 즉, 리사이클러뷰 사용 목적 중 하나인 퍼포먼스의 이득이 없어지게 됩니다. 님의 경우는 여기에 해당하기 때문에 궁금해서 질문을 드린 겁니다.
음 그런데 많을수도 있고 적을수도 있는거라 퍼포먼스 이득이 있을수도ㅠ있고 없을수도 있는것아니에여?
그렇겠죠. 아이템 갯수가 적을 때는 상관없겠지만 아이템의 갯수가 많아질 수록 문제가 있을 수 있습니다. Mock 아이템들을 넣어서 테스트를 먼저 해보시는 게 확실한 방법이겠죠.

답변 달기

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