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

[kotlin] recyclerView 사용시 item이 화면에 표시될 때 이벤트 발생

0 추천
안녕하세요 recyclerView 관련 질문있어 글 남깁니다.

인스타그램 같은 경우, 사진과 함께 사진 위에 현재 몇장의 사진 중 몇 번째 사진인지가 표시됩니다.

사진을 보기위해서 그 위치에 고정시켜 놓을 경우, 5초 정도 이후 사진 위에 보여지는 view들이 사라지도록 구현되었고,

이는 다시 스크롤을 내렸다 올려서 화면에 item을 배치하면 다시 뜨는 것을 확인할 수 있었습니다.

 

사라지는 것은 adapter 내에서 GlobalScope를 통해 딜레이처리해주어 사라지도록 구현해봤는데,

3000으로 설정해놔서 3초 이후 사라지긴 하는데, 모든 Item들에 동등하게 3초 이후 사라지게 됩니다..

제가 원하는 것은 인스타그램과 같이 recyclerview의 Item이 보였을 때 정보들이 보였다가 일정 시간이후 사라지게 하는,

각각의 item마다 구분되게 이러한 이벤트가 실행될 수 있도록 구현하고 싶은데,

이럴 땐, 어떤 것을 사용해야 할까요??
hand (1,150 포인트) 님이 2022년 11월 15일 질문

1개의 답변

0 추천
 
채택된 답변
우선 GlobalScope은 애플리케이션과 같은 scope을 가지게 되므로, 취소 등이 문제가 생겨서 리소스가 낭비될 가능성이 많기 때문에 분명한 이유가 있고 취소 등을 관리하실 수 있지 않으면 사용을 권장하지 않습니다. 그리고 리사이클러뷰의 뷰홀더는 화면에 보이는 아이템갯수보다 좀금 더 생성되고 스크롤시 재사용이 되어 지기 때문에, 스크롤 시에는 coroutine을 실행했다면, job을 취소할 수 있도록 관리를 하셔야 할 것 같습니다. Globalscope 을 사용하지 않는다면,  Activity나 Fragment의  lifecycleScope같은 걸 넘겨줘서 사용하던가, 아니면 어댑터 안에서 scope을 하나 만들고 Activity/ Fragment에서 취소해 줄 수도 있을 것 같네요. ViewModelScope 을 사용할 수 있다면, coroutine scope의 취소는 신경쓰지 않아도 될 것 같아 보이네요.

이 문제를 ListAdpater나 DiffUtil같은 걸 사용해서 뷰모델같은 데서 남은 사진 갯수를 업데이트한 후 어댑터에 변경된 데이터를 제공하면 해결할 수 있을지는 조금 의문이 드네요.

질문하신 내용은 실제로 코드를 짜서 테스트를 좀 해봐야 제대로 동작하는지 알 수 있을 것 같기 때문에 더 구체적으로는 답을 드리기가 어렵네요.
spark (227,470 포인트) 님이 2022년 11월 16일 답변
hand님이 2022년 11월 18일 채택됨
답변 감사합니다 spark님 scope에 대해서 조금 더 공부해보아야겠어요
...