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

리사이클러뷰 oncreateviewholder

0 추천
리사이클러뷰 oncreateviewholder에서
if(hashmap == null)
 Testviewholder = CreateViewholder
else     
  TestViewholder

 

이런식으로 뷰홀더를 최초에 생성하고 그 뒤에 해쉬맵에 저장했다가 이미 만들어진 뷰홀더가 있다면 그 뷰홀더를 리턴하도록 구현을 했었는데요

java.lang.IllegalArgumentException: Called attach on a child which is not detached:

 

recyclerview.smooth스크롤로 최상단올리고 다시 손으로 내리고 몇번 하다보면 저런 크래시가 나옵니다 혹시 다른 대체할 방법이 없을까요?

저렇게 한 이유는 세로 리사이클러뷰에 유튜브가 있구 oncreateviewholder가 호출되면서 유튜브를 로딩하는데, 한번 로딩한 유튜브가 있고 그뒤로 아래로 한참 내렸다가 다시 올라오면 다시 oncreateviewholder을 호출하면서 다시 재로딩해서 이렇게 구현했습니다
수원통학러 (3,570 포인트) 님이 2022년 2월 28일 질문

1개의 답변

0 추천
ViewHolder를 캐싱하는 거는 안드로이드 SDK에 맡기시고 어댑터에 들어가는 데이터만 처리를 하세요. 어탭의 아이템이 유투브의 상태를 관리하도록 만들어 보세요.
참고로 onCreteViewHolder는 재사용에 필요한 갯수만큼만 호출이 되고 난 다음에는 아무리 스크롤을 해도 onCreateViewHolder는 호출되지 않고 onBindViewHolder만 호출되는 걸로 기억합니다. 따라서 님처럼 ViewHolder를 맵에 넣고 처리한다고 해도 원하는 캐싱효과는 없을 것으로 보입니다. 오히려 말씀하신 에러가 날 가능성만 더 생길 것 같아요.

어탭터 아이템에 youtube 재생상태를 기억할 수 있는 필드가 필요할 것 으로 보입니다. 코드를 올리시지 않아서 어떤 식으로 처리를 하셨는지 몰라 더 자세한 답변을 해드릴 수가 없네요.
spark (226,420 포인트) 님이 2022년 2월 28일 답변
spark님이 2022년 3월 1일 수정
...