[안드로이드] RecyclerView 사용법 (리사이클러뷰)
RecyclerView 사용법 (리사이클러뷰)
RecyclerView는 대량의 데이터를 효율적으로 화면에 나타내기 위해서, 각 아이템을 목록형태로 화면에 나타내는데 사용됩니다.
ListView와 유사하나 아래와 같은 성능개선과 유연함으로 ListView 업그레이드 버전으로 많이 사용됩니다.
1) ViewHolder 패턴을 기본적으로 구현하도록 하여 스크롤시에 뷰를 재사용함.
2) LayoutManager를 통해서 각 아이템의 배치를 수직, 수평, 격자 등 다양하게 배치할 수 있음.
※ RecyclerView 구현방법 요약
1. RecyclerView를 담을 Layout 작성 (activity_main.xml)
2. 각 아이템 View 구성을 위한 Layout 작성 (recyclerview_item.xml)
3. RecyclerView 어댑터와 ViewHolder 구현 (CustomAdapter.java)
4. LayoutManager객체와 RecyclerView 어댑터 객체 생성 후 연결 (MainActivity.java)
예제) RecyclerView로 데이터 목록 나타내기
1. RecyclerView를 담을 Layout 작성
RecyclerView를 담을 Main Activity의 Layout를 작성합니다.
- activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="RecyclerView 테스트"
android:textSize="32dp"
android:textColor="#FFFFFFFF"
android:padding="8dp"
android:background="#FF3F3F3F"
android:gravity="center"/>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
2. 각 아이템 View 구성을 위한 Layout 작성
RecyclerView안에 표현될 각 아이템의 화면 구성을 위한 Layout를 작성합니다.
- recyclerview_item.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="8dp"
android:orientation="horizontal">
<ImageView
android:id="@+id/imageView"
android:layout_width="60dp"
android:layout_height="60dp"
android:src="@mipmap/ic_launcher"/>
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:textSize="24dp"
android:text="text"/>
</LinearLayout>
3. RecyclerView 어댑터와 ViewHolder 구현
어댑터와 뷰홀더를 구현해줍니다.
어댑터 구현시 생성자를 통해서 데이터를 전달받도록 하고 아래의 세가지 메서드를 재정의 합니다.
1) onCreateViewHolder() : ViewHolder 객체를 생성하고 초기화 합니다.
2) onBindViewHolder() : 데이터를 가져와 ViewHolder안의 내용을 채워줍니다.
3) getItemCount() : 총 데이터의 갯수를 반환하도록 합니다.
- CustomAdapter.java
public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.ViewHolder>{
private ArrayList<String> localDataSet;
//===== 뷰홀더 클래스 =====================================================
public static class ViewHolder extends RecyclerView.ViewHolder {
private TextView textView;
public ViewHolder(@NonNull View itemView) {
super(itemView);
textView = itemView.findViewById(R.id.textView);
}
public TextView getTextView() {
return textView;
}
}
//========================================================================
//----- 생성자 --------------------------------------
// 생성자를 통해서 데이터를 전달받도록 함
public CustomAdapter (ArrayList<String> dataSet) {
localDataSet = dataSet;
}
//--------------------------------------------------
@NonNull
@Override // ViewHolder 객체를 생성하여 리턴한다.
public CustomAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.recyclerview_item, parent, false);
CustomAdapter.ViewHolder viewHolder = new CustomAdapter.ViewHolder(view);
return viewHolder;
}
@Override // ViewHolder안의 내용을 position에 해당되는 데이터로 교체한다.
public void onBindViewHolder(@NonNull CustomAdapter.ViewHolder holder, int position) {
String text = localDataSet.get(position);
holder.textView.setText(text);
}
@Override // 전체 데이터의 갯수를 리턴한다.
public int getItemCount() {
return localDataSet.size();
}
}
4. LayoutManager객체와 RecyclerView 어댑터 객체 생성 후 연결
LayoutManage는 예제의 LinearLayoutManager말고도 아래의 3가지 중 선택하여 사용 가능합니다.
1) LinearLayoutManager
ex) ~ = new LinearLayoutManager(this);
2) GridLayoutManager
ex) ~ = new GridLayoutManager(this, 2);
3) StaggeredGridLayoutManager
ex) ~ = new StaggeredGridLAyoutMAnager(3, StaggeredGridLayoutManager.VERTICAL);
- MainActivity.java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//===== 테스트를 위한 더미 데이터 생성 ===================
ArrayList<String> testDataSet = new ArrayList<>();
for (int i = 0; i<20; i++) {
testDataSet.add("TEST DATA" + i);
}
//========================================================
RecyclerView recyclerView = findViewById(R.id.recyclerView);
//--- LayoutManager는 아래 3가지중 하나를 선택하여 사용 ---
// 1) LinearLayoutManager()
// 2) GridLayoutManager()
// 3) StaggeredGridLayoutManager()
//---------------------------------------------------------
LinearLayoutManager linearLayoutManager = new LinearLayoutManager((Context) this);
recyclerView.setLayoutManager(linearLayoutManager); // LayoutManager 설정
CustomAdapter customAdapter = new CustomAdapter(testDataSet);
recyclerView.setAdapter(customAdapter); // 어댑터 설정
}
}
참고자료
https://developer.android.com/guide/topics/ui/layout/recyclerview?hl=ko
2021.12.30 - [IT 개발/Android] - [안드로이드] RecyclerView 업데이트 및 갱신 방법
2022.01.15 - [IT 개발/Android] - [안드로이드] RecyclerView 클릭 이벤트 구현하기