본문 바로가기

Language/RxJava

[RxJava] 6장. 안드로이드의 RxJava 활용 2 - RecyclerView 클래스

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