RecyclerView는 AdapterView(ListView 또는 GridView와 같은)보다 유연한 뷰로서,
AdapterView를 완전히 대체할 수 있고 확장할 수 있다.
특히 리스트의 일부가 변경 될 때 애니메이션과 같은 처리에 유용하다.
[ RecyclerView 소개 ]
RecyclerView는 List를 표시하기 위한 AdapterView를 좀 더 개선한 컴포넌트이다.
AdapterView는 빠르게 스크롤 할 때 성능 문제와 불필요한 지연 문제가 있다.
그리고 데이터 목록이 변경되었을 때 notifyDataSetChanged( ) 메소드를 빈번하게 호출하여 전체 아이템을 갱신하는 데 비용이 많이 든다.
RecyclerView는 이러한 문제들을 해결하기 위해 만들어졌다.
[AdapterView와의 차이점]
RecyclerView는 레이아웃 매니저(Layout Manager)를 지정해 줘야 하고, 뷰홀더 패턴을 반드시 구현해야 한다.
RecyclerView의 Adapter는 Base Adapter 대신 RecyclerView.Adapter 클래스를 상속받아야 한다.
AdapterView와 달리 RecyclerView의 어댑터는 아무것도 제공해 주지 않으며, 이벤트 리스너와 Cursor를 지원하지 않는 등의 단점도 있다.
[살펴봐야 할 클래스]
클래스 | 설명 |
RecyclerView.Adapter | AdapterView의 어댑터와 같은 역할 |
RecyclerView.ViewHolder | 뷰홀더 클래스는 이것을 상속해야 함 |
LayoutManager | 아이템을 어떻게 배치할 것인지 결정 |
RecyclerView.ItemAnimator | 아이템이 추가, 삭제 또는 재정렬 될 때 애니메이션 정의 |
RecyclerView.ItemDecoration | 아이템을 세부적으로 꾸밈 |
RecyclerView 구현 관련 클래스
LayoutManager는 데이터를 배치하고, 뷰의 재사용 등을 결정하는 역할을 하여 기존의 AdapterView보다 성능이 개선되는 효과가 있다.
< LayoutManager의 종류 >
LinearLayoutManager | 데이터를 리스트뷰처럼 세로나 가로 한 줄로 표시 |
GridLayoutManager | 그리드뷰처럼 데이터를 그리드 형식으로 표시 |
StaggeredGridlayoutManager | 그리드뷰터럼 데이터를 격자 형식으로 표시하면서 아이템의 높이가 일정하지 않아도 되는 지그재그형 그리드 형식으로 표시 |
[ RecyclerView 사용 방법 ]
RecyclerView를 사용하기 위해서는 App모듈에 라이브러리 추가를 해줘야 한다.
그 다음 Open Module Settings에 들어간다.
Project Structure가 열리면 Dependencies에 들어가 +를 누르고 Libary Dependency 클릭!
recyclerview-v7를 입력하고 Search 버튼을 누르면 이렇게 recyclerview-v7을 추가할 수 있다.
같은 방법으로 appcompat-v7도 추가해주면
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.2.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
implementation 'com.android.support:recyclerview-v7:28.0.0'
implementation 'com.android.support:appcompat-v7:28.0.0'
}
코드 맨 밑 두 줄을 확인해보자!
dependencies에 recyclerview-v7과 appcompat-v7이 보일것이다.
이때 주의해야 할 점은 두 개의 version이 반드시 같아야 한다는 것이다!
build.gradle(Module: app)
apply plugin: 'com.android.application'
android {
compileSdkVersion 29
buildToolsVersion "29.0.1"
defaultConfig {
applicationId "com.example.paik_proto1"
minSdkVersion 24
targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.2.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
implementation 'com.android.support:recyclerview-v7:28.0.0'
implementation 'com.android.support:appcompat-v7:28.0.0'
}
위 코드에서 Version을 중심으로 참고해보자.
이렇게 모두 완료한 후 activity_main.xml로 가서
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<androidx.recyclerview.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent">
</androidx.recyclerview.widget.RecyclerView>
</RelativeLayout>
이렇게 android.recyclerview.widget.RecycelrView를 추가해주고 Preview를 확인해주면
'App > Android' 카테고리의 다른 글
[Android] TabLayout (0) | 2019.09.24 |
---|---|
Fragment를 화면에 추가하는 방법 이해하기 (0) | 2019.09.24 |
[Android] SharedPreference (0) | 2019.08.27 |
[Android Studio] Google 로그인 인증 (3) (0) | 2019.08.18 |
[Android Studio] Google 로그인 인증(2) (0) | 2019.08.18 |