ListView
- ListView API 에는 많은 롱테일 기능들이 있음
- 정의되지 않은 동작에 의존하는 복잡한 사용법
- 정의되지 않은 동작은 사실상 API가 됨
중복된 기능
- ListView selection or View focus?
- item click listener VS view click listener
애니메이션을 주기 어려움
- Adapter에서 똑똑한 애니메이션을 위한 충분한 정보를 주지 않음
- notifyDataSetChanged 에는 어떤 변경이 있었든지 호출
더 복잡한 레이아웃에 대한 요구
- 간단한 리스팅으로는 충분하지 않아 짐
- responsive layout, staggered layout 등을 원하게 됨
RecyclerView
- 더 똑똑한 Adapter
- 더 효율적인 recycling / animation
RecyclerView
- comunicate all component(LayoutManager, ItemAnimator, Adapter)
LayoutManager — positioning
ItemAnimator — animate view
Adapter — provide views
- View 와 ViewHolder를 생성
- item을 ViewHolder로 binding
- data set이 변경된 경우 알림 / sync를 맞춤
- item interaction handling (click listener, touch listener ,,, )
- view type 지원
ItemDecorator
- adapter에 접근하지 말 것
- 필요한 정보는 ViewHolder에 보관
- 일반적인 onDraw 규칙을 지킬 것
- recyclerView.getChildViewHolder(view)