Android Tutorial을 보던 중 RecyclerView라는 매우 활용도가 높은 박지성과 같은 Widget을 발견하여 공유한다.

Support Library v7에 혜성처럼 등장한 RecyclerView는 기존의 List/GridView를 개선시킨 버전으로 유연하게 리스트 타입을 변경할 수 있도록 설계되어 있다.

기존의 ListView가 ListView – Adapter – DataSet의 구조를 갖고 있었다면, RecyclerView는 이에 LayoutManager를 추가하여 리스트 타입을 쉽게 변경할 수 있도록 설계되어 있다.

또한, 평균 이상의 추리능력을 갖고 있는 사람은 유추했겠지만, 기존에 권장사항이었던 ViewHolder 패턴을 강제하여 재활용을 적극 권장하는 구조로 설계되어 있다.

RecyclerView.Adapter를 보면 기존의 getView() 대신 onCreateViewHolder()onBindViewHolder() 함수를 통해 제한된 수의 Child view를 생성한 뒤, 재활용하는 구조다. 로그를 통해 확인해보면 Child view 생성이 필요한 시점에만 onCreateViewHolder()를 통해 Child view를 생성하고 이후에는 onBindViewHolder()를 통해 View는 재활용하고 데이터만 갱신하는 구조다.

전체적인 구조는 아래와 같다.

기본적으로 제공하는 리스트 타입은 List, Grid, StaggeredGrid를 제공하고 있고 각각의 타입을 vertical, horizontal로 설정 가능하다. 각각의 LayoutManager는 아래와 같다.

ListLayoutManager : https://developer.android.com/reference/android/support/v7/widget/LinearLayoutManager.html

GridLayoutManager : https://developer.android.com/reference/android/support/v7/widget/GridLayoutManager.html

StaggeredGridLayoutManager : https://developer.android.com/reference/android/support/v7/widget/StaggeredGridLayoutManager.html

 

RecyclerView의 첫번째 미덕은 적용이 쉽다는 점이다.

  1. 1. support-library-v7에 숨쉬고 있는 android-support-v7-recyclerview.jar를 프로젝트에 추가한 뒤.
  2. 2. xml에 RecyclerView를 추가한 뒤,
  3. 3. 기존의 ListView와 비슷하게 사용하면 된다. 한가지 다른점이 있다면 LayoutManager를 통해 리스트 타입을 설정해줘야 한다는 점이다.
  4. 4. RecyclerAdapter는 RecyclerView.Adapter를 상속해야 한다.

 

RecyclerView의 두번째 미덕은 Entry의 추가, 삭제, 이동시에 기본적으로 제공하는 애니메이션이 훌륭하다는 점이다.

물론 추가, 삭제, 이동은 아래와 같이 쉽게 구현할 수 있다.

 

 

 

One more thing,

support-library-v4에 포함되어있는 SwipeRefreshLayout와의 궁합은 심히 대단해서 MBC 우결측에서 섭외를 시도하고 있다는 풍문도 들릴 정도다.