[Android] RecyclerView
RecyclerView 구현 방법에 대해 알아본다.
[ Android Studio - Java ]
RecyclerView
사용자가 관리하는 많은 수의 데이터 집합을 개별 아이템 단위로 구성하여 화면에 출력할 수 있게하며,
한 화면에 표시되기 힘든 많은 수의 데이터를 스크롤 가능한 리스트로 표시해주는 위젯이다.
기본적으로 ListView와 굉장히 유사한 위젯으로, ListView에서 더 기능이 추가된 확장판이 RecyclerVIew라고 볼 수 있다.
리스트 항목이 갱신될 때마다 새로 아이템 뷰를 구성해야하는 리스트뷰와 달리 리사이클러뷰는 아이템을 표시하기 위해 생성한 뷰를 재활용 즉, Recycler하는데 이것을 위해 뷰홀더를 사용한다.
리사이클러뷰는 리스트뷰와 다르게 수직, 수평 또는 격자 형태의 레이아웃 등을 모두 나타낼 수 있다.
이를 위해서 아이템 뷰가 나열되는 형태를 관리하기 위한 요소들을 Layout Manager를 통해 제공한다.
위의 레이아웃 매니저가 제공하는 레이아웃의 형태대로 어댑터를 통해서 만들어진 각 아이템 뷰는 ViewHolder 객체에
저장도어 화면에 표시되고, Recycle된다.
- ViewHolder
화면에 표시할 아이템 뷰를 저장하는 객체.
재사용할 뷰 객체를 기억하고 있을 객체로, ViewHolder가 데이터를 가지고 있고 해당 데이터가 화면에 나타난다.
스크롤을 내릴 때 이미 만들어진 뷰홀더가 존재한다면 데이터만 바인딩시켜 사용한다.
- Adapter
데이터 릿트를 화면에 표시하기 위해서 아이템 단위로 View를 생성해서 리싸이클러뷰에 바인딩 시켜주는 객체.
직접 따로 작성하여 리싸이클러뷰에 연결해줘야한다.
- getItemCount : 전체 아이템 개수를 리턴
- onCreateViewHolder : 인자로 받는 viewType 형태의 아이템 뷰를 위한 ViewHolder 객체 생성 함수
- onBindViewHolder : 생성된 뷰홀더에 데이터를 바인딩하는 함수. ViewHolder와 position을 받아 holder의 데이터 변경
getItemCount -> onCreateViewHolder -> onBindViewHolder 순서로 Adapter가 작동한다.
- LayoutManager
리싸이클러뷰의 아이템 뷰를 수직, 수평, 격자 등의 형태로 레이아웃 배치할 수 있도록 함
- LinearLayoutManager : 수직, 수평과 같이 일렬로 배치
- GridLayoutManager : 바둑판 모양의 격자 형태로 배치
- StaggeredGridLayoutManager : 엇갈린 격자 형태로 배치
실행
1. 원하는 위치(activity, fragment등 - 여기서는 activity)에 RecyclerView 레이아웃 추가
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler1"
android:scrollbars="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
2. RecyclerView의 itemView 레이아웃 생성
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</android.support.constraint.ConstraintLayout>
3. RecyclerView Adapter, ViewHolder 구현
public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.ViewHolder> {
private ArrayList<String> mData;
// 아이템 뷰를 저장하는 뷰홀더 클래스
public static class ViewHolder extends RecyclerView.ViewHolder {
// 아이템 뷰에 있는 객체 선언
// 뷰 객체에 대한 참조 (아이템 뷰에 등장하는 객체 참조해주기 ex)textView 등등)
public ViewHolder(View view) {
super(view);
// 아이템뷰에 있는 객체 초기화(findViewById 이용해 참조)
}
}
// 생성자에서 데이트 리스트 객체 전달받음
public CustomAdapter(ArrayList<String> dataSet) {
mData = dataSet;
}
// 아이템 뷰를 위한 뷰홀더 객체 생성
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
View view = LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.text_row_item, viewGroup, false);
return new ViewHolder(view);
}
// position에 해당하는 데이터를 뷰홀더의 아이템뷰에 표시
@Override
public void onBindViewHolder(ViewHolder viewHolder, final int position) {
}
// 전체 데이터 갯수 리턴
@Override
public int getItemCount() {
return mData.length;
}
}
4. 1번 위치에서 Adapter와 LayoutManager 선언
// 리사이클러뷰에 표시할 데이터 리스트 생성.
ArrayList<String> list = new ArrayList<>();
for (int i=0; i<100; i++) {
list.add(String.format("TEXT %d", i)) ;
}
// 리사이클러뷰에 LinearLayoutManager 객체 지정.
RecyclerView recyclerView = findViewById(R.id.recycler1) ;
recyclerView.setLayoutManager(new LinearLayoutManager(this)) ;
// 리사이클러뷰에 SimpleTextAdapter 객체 지정.
SimpleTextAdapter adapter = new SimpleTextAdapter(list) ;
recyclerView.setAdapter(adapter) ;
https://recipes4dev.tistory.com/154
안드로이드 리사이클러뷰 기본 사용법. (Android RecyclerView)
1. 안드로이드 리사이클러뷰(RecyclerView) 리사이클러뷰(RecyclerView)는, "많은 수의 데이터 집합을, 제한된 영역 내에서 유연하게(flexible) 표시할 수 있도록 만들어주는 위젯"입니다. [안드로이드 개발
recipes4dev.tistory.com
https://developer.android.com/guide/topics/ui/layout/recyclerview?hl=ko#implement-adapter