본문 바로가기
Rx

안드로이드의 RxJava 활용 - 6(리액티브 리싸이클러뷰)

by 봄석 2018. 12. 30.

본 내용은 필자가 학습한 내용을 정리하는 내용입니다.

대부분 의 내용이 아래 책의 내용이므로 원서를 구매해서 직접보시는걸 추천드립니다!

RxJava 프로그래밍 리액티브 프로그래밍 기초부터 RxAndroid까지 한 번에

유동환 , 박정준 지음 | 한빛미디어 | 2017년 09월 04일 출간

http://www.kyobobook.co.kr/product/detailViewKor.laf?ejkGb=KOR&mallGb=KOR&barcode=9788968488658&orderClick=LAV&Kc=


저자님의 블로그

https://brunch.co.kr/@yudong#info



RxAndroid 활용 - 리액티브 RecyclerView

RxAndroid를 이용하여 RecyclerView를 구현합니다. 설치된 앱의 정보를 읽어와서 보여주는 간단한 예제입니다. 이를통해 리액티브를 이용한 리스너 및 뜨거운 Observable의 사용버을 배울 수 있습니다.


RecyclerView 클래스

앱만들기의 핵심은 RxAndroid로 리싸이클러뷰를 만드는 것입니다. 안드로이드 5.0에서 처음 소개된 리싸이클러뷰는 안드로이드에서 사용하는 리스트 뷰의 장,단점을 보완한 고급 위젯입니다.

한정된 수의 뷰를 유지해서 매우 효율적으로 스크롤 할 수있는 큰 데이터 세트를 표시하기 위한 컨테이너 입니다.


리싸이클러 뷰를 사용하기 위해 안드로이드 SDK는 RecyclerView 클래스를 제공합니다.

RecyclerView 클래스에는 서브 클래스인 LayoutManager가 있습니다. 이를 이용하여 뷰를 정의하고, Adapter 클래스를 이용하여 dataset에 맞는 ViewHolder 클래스를 구현할 수 있습니다

(어뎁터클래스를 이용해 ViewHolder 생성). 이외에도 RecyclerView 클래스는 뷰를 제어하는 ItemDecoration,ItemAnimation이라는 서브클래스를 둡니다. Adapter 클래스와 상호 연결되며,

ViewHolder클래스에서 데이터와 뷰를 받아 이를 재사용 할 수 있습니다.


Adapter 클래스는 데이터세트(dataset)에 맞는 데이터와 아이템에 관한 뷰를 생성하고 데이터에 관한 뷰는 ViewHolder 클래스를 구현할 수 있습니다.


RecyclerView 클래스와 함께 사용하는 주요 클래스 목록

 클래스이름

설명 

 Adapter 

 데이터 세트의 아이템을 나타내는 뷰를 생성합니다. 

 ViewHolder 

 재활용 뷰에 대한 모든 서브 뷰를 정의합니다. 

 LayoutManager 

 뷰에 있는 아이템을 배치하고 관리합니다. 

 ItemDecoration 

 아이템을 꾸미는 서브 뷰를 제어합니다. 

 ItemAnimation 

 아이템을 추가,정렬,제거 할떄 애니메이션 효과를 줍니다. 




Adapter 클래스

Adapter 클래스는 ViewHolder 클래스를 이용한 데이터 세트의 정의에 따라 UI를 선택해 보여줍니다. ListView클래스의 경우는 데이터의 종류에 따라 BaseAdapter 클래스를 상속한 ArrayAdapter, CustomAdapter, simpleAdapter 클래스로 구분하여 사용합니다. 하지만 RecyclerView 클래스는 ViewHolder클래스의 정의에 따라 UI를 선택하고 데이터를 처리합니다.

그러므로 다음 세가지 메소드를 구현해 주어야 합니다.


- onCreateViewHolder(ViewGruop parnet, int viewType) : ViewHolder를 생성하고 뷰를 붙여주는 부분입니다,

- onBindViewHolder(ListItemViewHolder holder, int position) : 재활용하는 뷰를 호출하여 실행하는 메소드입니다. 뷰 홀더를 전달하고 어댑터는 position 인자의 데이터를 결합합ㄴ디ㅏ.

- getItemCount() : 데이터의개수를 반환합니다.


ListView 클래스에서 ViewHolder클래스를 사용하려면 개발자가 직접 구현해 주어야합니다.

그러나 RecyclerView 클래스는 구현된 ViewHolder 클래스를 사용하여 뷰를 재사용합니다.




이제 RxAndroid를 이용하여 RecyclerView를 만들어보겠습니다. 안드로이드 스마트폰에 설치되어있는 앱 정보를 읽어와서 리스트를 구성하는 예제입니다.



app/build.gradle 파일에 다음 코드를 입력해 라이브러리를 추가합니다.

implementation "com.android.support:recyclerview-v7:${supportLibVersion}"
compileOnly 'org.projectlombok:lombok:1.16.18'
annotationProcessor 'org.projectlombok:lombok:1.16.18'

compileOnly 'org.glassfish:javax.annotation:10.0-b28'


두번째로 추가한 Lombok 라이브러리는 애너테이션을 이용하여 멤버 필드(프로퍼티)에 대한 게터(getter), 세터(setter), hashCode(), ToString() 메소드와 멤버필드에 주입하는 생성자를 자동으로 생성합니다.



LayoutManager 클래스

LayoutManager 클래스는 뷰를 그리는 방법을 정의합니다. 리스트 뷰는 수직 형태의 리스트만을 지원하지만 RecyclerView 클래스는 수직 뿐만아니라 다양한 리스트 형태를 지원합니다.


LayoutManager클래스에서 사용할 수 있는 리스트의 종류는 세가지가 있습니다. 첫 번째는 LinearLayoutManager 클래스로 가로 또는 세로의 형태의 리스트로 나타냅니다.




두 번째는 GridLayoutManager 클래스로 그리드 형식으로 항목을 표시할 때 사용합니다.

세 번째는 StaggeredGridLayoutManager 클래스로 지그재그 그리드 형태로 항목을 표시합니다.



또한 RecyclerView 클래스는 사용자가 직접 정의할 수 있는 애니메이션 효과 클래스를 제공합니다. RecyclerView.ItemAnimator를 상속하여 setItemAnimator() 메소드를 오버라이딩 하면 됩니다.


리스트뷰는 XML로 디바이더를 추가 할 수 있었지만 리싸이클러뷰에서는 RecyclerView.ItemDecoration 클래스를 통해 동적으로 리스트에 디바이더를 추가 할 수 있습니다.



댓글