** RecyclerView, Adapter, ViewHolder 개념 **
참고 URL : http://horajjan.blog.me/220745854967
'실무에 바로 적용하는 안드로이드 프로그래밍, 9장'을 인용하였다 (예제 첨부)
RecyclerView는 ViewGroup의 서브 클래스로, 자식 View 객체들의 리스트를 보여준다
위 그림처럼 100개의 View를 생성하는 대신 한 화면을 채우는 데 충분한 12개만 생성한다. 그리고 화면이 스크롤되면서 View가 화면을 벗어날 때 RecyclerView는 그 View를 버리지 않고 재활용한다
RecyclerView는 위 TextView들을 재활용하고 화면에 보여주는 책임만 갖는다. Adapter의 서브 클래스와 ViewHolder의 서브 클래스가 함께 동작해야 한다
ViewHolder는 한 가지 일, 즉 하나의 View를 보존하는 일을 한다
RecyclerView는 자신이 ViewHolder를 생성하지 않는다. 대신에 그 일을 어댑터(adapter)에 요청한다
어댑터는 다음과 같은 책임을 갖는다
- 필요한 ViewHolder 객체를 생성한다
- 모델 계층의 데이터를 ViewHolder와 결합한다
우선 RecyclerView에서 구현하는 어댑터의 getItemCount() 메서드를 호출하여 리스트에 보여줄 객체 개수를 요청한다
그 다음에 RecyclerView는 어댑터의 onCreateViewHolder(ViewGroup, int) 메서드를 호출하여 ViewHolder 객체를 받는다. 그리고 RecyclerView는 onBindViewHolder(ViewHolder, int)를 호출하며, 이때 리스트 항목의 위치와 함께 ViewHolder 객체를 인자로 전달한다. 그 다음에 어댑터는 그 위치 모델 데이터를 찾은 후 그것을 ViewHolder의 View에 결합한다
여기서 주목할 점은 onCreateViewHolder(ViewGroup, int) 메서드가 onBindViewHolder(ViewHolder, int)보다 적게 호출될 수 있다는 것이다. 충분한 개수의 ViewHolder 객체가 생성되면 RecyclerView가 onCreateViewHolder(...)의 호출을 중단하기 때문이다. 그리고 기존에 생성된 ViewHolder 객체를 재사용하여 시간과 메모리를 절감한다
'[Android] - 개념 > RecyclerView' 카테고리의 다른 글
RecyclerView와 CardView 사용하기 (0) | 2017.01.18 |
---|---|
RecyclerView 기본 개념 (0) | 2017.01.18 |