728x90
RecyclerView 클래스
- 리스트 뷰(ListView)의 장단점을 보완한 위젯.
- 한정된 수의 뷰를 유지해서 매우 효율적으로 스크롤 할 수 있는 큰 데이터 세트를 표시하기 위한 컨테이너.
- 서브 클래스인 LayoutManger를 이용하여 뷰를 정의, Adapter 클래스를 이용하여 DataSet에 맞는 ViewHolder 클래스를 구현할 수 있다.
RecyclerView와 함께 사용하는 주요 클래스
- Adapter : 데이터 세트의 아이템을 나타내는 뷰를 생성
- ViewHolder : 재활용 뷰에 대한 모든 서브 뷰를 저장
- LayoutManager : 뷰에 있는 아이템을 배치하고 관리
- ItemDecoration : 아이템을 꾸미는 서브 뷰를 제어
- ItemAnimation : 아이템을 추가, 정렬, 제거할 때 애니메이션 효과를 준다.
Adapter 클래스
ListView는 데이터 종류에 따라 클래스를 구분하여 사용한다.
하지만, RecyclerView는 ViewHolder 클래스의 정의에 따라 UI를 선택하고 데이터를 처리한다.
필수 구현 메서드
- onCreateViewHolder(ViewGroup parent, int viewType) : ViewHolder를 생성하고 뷰를 붙여준다. viewType에 따라 최초 1회만 호출된다.
- onBindViewHolder(ListItemViewHolder holder, int position) : 재활용하는 뷰를 호출하여 실행. 뷰 홀더를 전달하고 어댑터는 position 인자의 데이터를 결합
- getItemCount() : 데이터의 개수를 반환
class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.MyViewHolder> {
...
// DataSet 클래스의 RecyclerItem는 게시글 최하단에 구현.
private List<RecyclerItem> mItems = new ArrayList<>();
...
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
final View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.custom_recycler_view_item, parent, false);
// custom_recycler_view_item 는 직접 구현해야 한다.
return new MyViewHolder(view);
}
// 화면에 보여줄 데이터들을 세팅
@Override
public void onBindeViewHolder(MyViewHolder holder, int position) {
final RecyclerItem item = mItems.get(position);
holder.mImage.setImageDrawable(item.getImage());
holder.mTitle.setText(item.getTitle());
holder.mSize.setText(item.getSize());
...
}
@Override
public int getItemCount() {
return mItems.size();
}
...
}
LayoutManger 클래스
뷰를 그리는 방법을 정의.
LayoutManger 클래스에서 사용할 수 있는 리스트의 종류는 세 가지 이다.
- LinearLayoutManger : 가로 또는 세로 형태의 리스트
- GridLayoutManger : 그리드 형식
- StaggeredGridLayoutManger : 지그재그 그리드 형식
@Data
public class RecyclerItem {
Drawable image;
String title;
int size;
...
... getter() { ... };
... setter(...) { ... };
...
}
DataSet 클래스는 다음과 같이 구현된다.
보통, DataSet 클래스는 RecyclerView를 사용하여 화면에 뿌려줄 데이터들을 가지고 있는 클래스로,
getter, setter을 사용해 데이터를 get, set 하는 함수를 구현한다.
* LomBok 라이브러리와 @Data 애너테이션을 사용하면 getter, setter, equals 메서드 및 생성자를 자동으로 생성해준다.
728x90
'Language > RxJava' 카테고리의 다른 글
[RxJava] 6장. 안드로이드의 RxJava 활용 4 - 메모리 누수 (0) | 2020.06.12 |
---|---|
[RxJava] 6장. 안드로이드의 RxJava 활용 3 - Thread (0) | 2020.06.12 |
[RxJava] 6장. 안드로이드의 RxJava 활용 1 - RxAndroid 소개 (0) | 2020.06.11 |
[RxJava] 5장. 스케줄러 (0) | 2020.06.09 |
[RxJava] 4장. 리액티브 연산자의 활용 4 - 조건 연산자 및 기타 연산자 (0) | 2020.06.08 |