티스토리 뷰

Android/UI

RecyclerView (1)

parkho79 2021. 2. 17. 09:54
300x250
300x250



지난 포스팅에는 ListView, GridView 에 대해 시리즈로 알아보았다.

이번 포스팅에서는 ListView, GridView 의 개선판이라 볼 수 있는 RecyclerView 에 대해 알아보려 한다.



RecyclerView

public class RecyclerView
extends ViewGroup implements ScrollingViewNestedScrollingChild2NestedScrollingChild3

java.lang.Object
   ↳ android.view.View
     ↳ android.view.ViewGroup
       ↳ androidx.recyclerview.widget.RecyclerView

 


RecyclerView 는 Android 5.0(Lollipop) 버전에서 처음 소개한 widget 으로 ListView 에 유연함(Flexibility)과 성능(Performance)을 더한 개선 버전이다.

Google 에서도 ListView, GridView 레거시로 처리하고 리스트 형식의 UI 를 구성할 때 RecyclerView 를 사용하도록 권장하고 있다.



Different

RecyclerView 가 ListView 와 어떤 차이가 있는지 알아보자.

 

◼ ViewHoler 패턴의 의무사용

ListView 를 구현할 경우 큰 문제점으로 성능저하가 있다. (리스트 항목이 갱신될 때마다 아이템 뷰 새로 구성)

이를 해결하기 위해 ViewHolder 패턴을 쓸 수 있지만 선택사항 이였다. (즉, 모르는 사람은 안 쓴다는 얘기다.)

 

RecyclerView 에서는 ViewHolder 패턴을 의무적으로 사용하여 성능저하를 미연에 방지하도록 만들었다.

ViewHolder 관련 상세 설명은 이전 ListView 포스팅을 참조하기 바란다.

[Android/UI] - ListView (3) - ListView 에 image 추가하기

 

◼ LayoutManager

ListView 에서는 기본적으로 수직 방향의 리스트만 지원한다.

(물론 커스터마이징을 통해 원하는 형태를 구현 할 수 있다.)

 

RecyclerView 에서는 LayoutManager 를 통해 하단과 같은 타입의 리스트들을 지원한다.

- LinearLayoutManager: 수직, 수평 타입으로 아이템 배치.

- GridLayoutManager: 바둑판 모양의 격자 타입으로 아이템 배치

- StaggeredGridLayoutManager: 아이템 마다 크기가 다른 격자 타입으로 아이템 배치

 

 

◼ ItemDecoration

ListView 에서는 ItemView 사이 간격에 대한 설정을 divider 를 통해 설정 했다.

 

RecyclerView 에서는 ItemDecoration 클래스를 통해 설정이 가능하다.

ListView 대비 다소 복잡하긴 하지만 좀 더 동적인 사용과 커스터마이징이 편해졌다.

 

◼ ItemAnimator

RecyclerView 에서는 애니메이션 지원을 위해 ItemAnimator 클래스를 제공한다.

ItemAnimator 를 통해 ItemView 의 삽입, 삭제, 이동 시 애니메이션을 커스터마이징 할 수 있다.

 

◼ Touch event detection

ListView 에서는 OnItemClickListener 를 통해 아이템들의 클릭 여부를 감지 할 수 있다.

 

RecyclerView 에서는 onItemTouchListener 를 통해 뷰의 터치 이벤트를 감지한다.

조금 복잡하지만, 터치 이벤트를 RecyclerView 에 전달하기 전에 제어권을 가져옴으로써, 좀 더 유용하게 사용될 수 있다.



Gradle 에 라이브러기 추가하기

RecyclerView 는 Android 5.0(Lollipop) 버전에서 처음 소개한 widget 으로 SupportLibrary 에 포함되어 있다.

RecyclerView 를 사용하기 위해서는 build.grale 에 하단과 같이 코드를 추가해야 한다.

 

◼ v7 Support Libraries

 

◼ AndroidX



Layout 에 RecyclerView 추가하기

하단 코드와 같이 layout XML 파일에 RecyclerView 를 추가한다.

 

◼ v7 Support Libraries

 

◼ AndroidX



RecyclerView item view 추가하기

하단과 같이 RecyclerView item 에 표시될 item view layout 을 추가한다.

 

 



ViewHolder 구현하기

ViewHolder 는 각 layout 객체에 존재하는 view 를 보관하는 holder 객체다.

ListView, RecyclerView 는 inflate 를 최소화 하기 위해서 뷰를 재활용 하는데, findViewById 를 매번 호출 해야한다.

이로 인한 성능저하를 피하기 위해 ItemView 의 각 요소를 바로 엑세스 할 수 있도록 저장해두고 사용한다.

 

ViewHolder 관련 상세 설명은 이전 ListView 포스팅을 참조하기 바란다.

[Android/UI] - ListView (3) - ListView 에 image 추가하기

 

 



Adpater 구현하기

Data(text) 를 RecycerView 에 표현하기 위해서는 Adapter 가 필요하다.

Adapter 는 하단과 같이 데이터와 화면에 출력될 item view 를 연결해 주는 역할을 한다.

 

 

 

◼ onCreateViewHolder(ViewGroup parent, int viewType)

ViewHolder 생성 시에 호출된다.

처음 화면에 보이는 view 의 ViewHolder 객체를 생성하며, 화면에 보이는 만큼의 ViewHolder 객체가 생성되면 이후 호출되지 않는다.

ViewType 형태에 따라 다른 type 의 ViewHolder 객체를 생성할 수 있다.

 

◼ onBindViewHolder(ViewHolder holder, int position)

스크롤 등으로 특정 position 의 data 를 새롭게 표시해야 할 때마다 호출.

Position 에 해당하는 데이터를 ViewHolder 에 연결하여 item view 에 표시.

 

◼ getItemCount()

전체 item 개수 반환.

반환 되는 개수에 따라 생성되는 Item 의 개수가 정해진다.



RecycerView 에 LayoutManager 설정 및 Adapter 연결

이제 위에서 만든 Adapter 에 LayoutManager 와 Adapter 를 설정해야 한다.

 



Source code

https://github.com/parkho79/RecyclerView_1



728x90
댓글