본문 바로가기

Mobile/Android

[ Android ] RecyclerView 와 ListView 차이

반응형

 

|  ViewHolder 패턴 의무화

ListView는 뷰홀더 패턴을 권장했지만, 강제성은 없다.
반면, RecyclerView는 무조건 뷰홀더 패턴을 사용해야한다.

 

그래서 ListView와 달리 RecyclerView는 다음과 같은 메서드를 Adapter에서 사용한다.

  • onCreateViewHolder(ViewGroup parent,int viewType) 
  • onBindViewHolder(ListItemViewHolder holder,int position)

| onCreateViewHolder

뷰 홀더를 생성하고 뷰를 붙여주는 부분. 처음에 화면에 보이는 뷰에 대해 뷰 홀더가 생성되며,

이후 스크롤 시 보여지는 뷰들은 재활용되는 뷰이므로 다시 호출되지 않는다.

 

| onBindViewHolder

화면에 뷰홀더가 붙을 때마다 호출된다. 
뷰 홀더를 전달하고 어댑터는 position의 데이터를 결합시킨다. 

 

RecyclerView는 이러한 ViewHolder의 의무화를 통해 뷰를 재사용함으로써

효율성을 높이고 메모리 낭비를 줄여준다는 장점이 있다.

 

 

| LayoutManager 제공

  • LinearLayoutManager : 수직 또는 수평 타입의 리스트를 지원한다.
  • GridLayoutManager : 격자형 타입의 리스트를 지원한다.
  • StaggeredGridLayoutManager : ItemView 마다 크기가 다른 리스트를 만들 수 있도록 지원한다.

 

| 구분 ( Divider )

ListView에서는 ItemView 사이의 간격에 대한 설정을 Divider를 통해 설정 하였다면, 
RecyclerView에서는 ItemDecoration 클래스를 통해 설정이 가능하다.  
다소 사용하기에 복잡해지긴 했지만 좀 더 동적인 사용과 커스텀에 유리해졌다.

 

 

| 애니메이션

ListView는 아이템 삽입, 삭제에 대한 애니메이션이 없다.  
Recyclerview는 ItemAnimator클래스를 통해 애니메이션 핸들링 가능하다. 
삽입, 삭제, 이동에 대한 커스터마이징 가능, defaultItemAnimator가 제공된다.

 

wasabeef/recyclerview-animators

An Android Animation library which easily add itemanimator to RecyclerView items. - wasabeef/recyclerview-animators

github.com

 

반응형