[안드로이드] RecyclerView

Chloe Choi·2021년 5월 17일
0

안드로이드

목록 보기
15/17

RecyclerView

한정된 수의 뷰를 유지해 큰 데이터 집합을 표시하는 컨테이너

  • ViewHolder 패턴을 사용해 View를 재활용함
  • RecycledViewPool에서 현재 쓰이지 않는 View를 관리

ViewHolder 패턴

화면에 보이는 수 정도의 itemView만 만들어 놓고 scroll되며 안보이게 된 itemView에 new data로 replace 하는 방식

ViewHolder

View 정보를 들고 있는 class

Adapter.onCreateViewHolder

ViewHolder를 생성하는 function

Adapter.onBindViewHolder

data를 가져와 ViewHolder layout을 채우는 function

동작방식


즉, 새로운 itemView가 보여야 하는 상황에 reuse 될 View가 있다면 바로 onBindViewHolder가 호출되고, 그렇지 않다면 onCreateViewHolder를 통해 생성한 뒤 진행

이런 방식으로 진행되기 때문에

  • onCreateViewHolder: 한정된 수 만큼 호출
  • onBindViewHolder: 스크롤 등의 발생으로 스크린에 출력되는 data가 변경될 때마다 호출

👩‍💻 추가

ViewHolder 패턴을 사용하지 않는다면?

매번 다른 View를 findViewById(id)를 통해 찾아옴
이 function은 id와 매치되는 View를 리턴하기 위해 parent -> children 모두를 돌며 확인함. 따라서, 성능에 영향을 미칠 수 있음(버벅이며 스크롤된다거나..!)

click listener는 어디서 달까?

  • onCreateViewHolder: 한정된 수 만큼 호출
  • onBindViewHolder: 스크롤 등의 발생으로 스크린에 출력되는 data가 변경될 때마다 호출

굳이 매번 onBindViewHolder에서 설정해줄 필요 🙅‍♀️
👉 onCreateViewHolder에서 Recycler.ViewHolder.getAdapterPosition()을 이용해 설정하자!

profile
똑딱똑딱

2개의 댓글

comment-user-thumbnail
2021년 5월 17일

findViewById
-> parent(전체), child(부분)에 따라 다른 구현을 갖는데 composite 패턴을 사용하나?

1개의 답글