RecyclerView

유민국·2023년 6월 14일
0

RecyclerView

Android 5.0 때 추가된 View 이다.
ListView와 GridView의 구현이 비슷한 부분이 많이 이를 통합한 View이다.
RecyclerView는Adapter를 직접 구현해 줘야 하며 이를 통해 항목을 자유롭게 구성할 수 있다.
RecyclerView는 반드시 항목들을 어떠한 형태로 보여줄 것인가를 설정해야 한다.

viewHolder 만들기

ViewHolder 클래스는 항목 하나를 구성하는 View 들의 주소 값을 가지고 있는 클래스이다.
이 클래스는 RecyclerView의 Adapter 클래스 내부에 구현하여 준다.

class ViewHolderClass extends RecyclerView.ViewHolder {
	ImageView rowImageview;
    TextView rowTextView;    
    
    public ViewHolderClass(RowBinding rowBinding){
    super(rowBinding.getRoot());
    
    rowImageview = rowBinding.rowImageView;
    rowTextView = rowBinding.rowTextView;
    }
}

RecyclerView의 Adapter 클래스

RecyclerView는 RecyclerView.Adapter 클래스를 상속받은 클래스를 작성하여 Adapter를 구성해야 한다.
onCreateVeiwHolder : RecyclerView는 항목 하나를 구성하기 위해 ViewHolder를 사용한다. ViewHolder는 항목 내부를 구성하는 View 객체들을 관리하는 객체로 ViewHolder를 생성하고자 할 때 이 메서드를 호출한다.
onBindViewHolder : 항목을 구성하기 위해 호출한다. 여기에서 ViewHolder가 가지고 있는 View들을 구성해준다.
getItemCount : RecyclerView의 항목의 개수를 반환한다.

RecyclerView의 AdapterClass
1. 아무것도 상속받지 않은 클래스를 만들어준다.
2. ViewHolder를 만들어준다.
3. AdapterClass를 RecyclerView.Adapter를 상속받게 한다.
4. 필요한 메서드들을 구현한다.

class RecyclerAdapterClass : RecyclerView.Adapter<RecyclerAdapterClass.ViewHolderClass>(){
    inner class ViewHolderClass(itemView: View) : ViewHolder(itemView){

    }

	// ViewHolder의 객체를 생성해서 반환한다.
    // 젠체 행의 개수가 아닌 화면에 필요한 만큼만 행으로 사용할 View를 만들고 ViewHolder도 생성한다.
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolderClass {
        TODO("Not yet implemented")
    }
	// 전체 행의 개수를 반환한다.
    override fun getItemCount(): Int {
        TODO("Not yet implemented")
    }
    // viewHolder를 통해 View에 접근하여 View의 값을 설정한다.
    // holder : ViewHolder 객체
    // position : 특정 행의 순서값
    override fun onBindViewHolder(holder: ViewHolderClass, position: Int) {
        TODO("Not yet implemented")
    }
}

항목 배치

RecyclerView는 ListView와 GridView를 통합한 View이다. 따라서 ListView 처럼 보여줄 것인지 GridView 처럼 보여줄 것인지 결정해야 한다.
LinearLayoutManager : ListView 처럼 항목을 보여준다.
GridLayoutManager : GridView 처럼 항목을 보여준다.
StaggerGridLayoutManager : GridView 처럼 보여주지만 완전한 그리드가 아닌 각 항목의 크기에 따라 유동적으로 조절된다.

처음 생성된 항목들이 전부 Pool에 담기고 화면에 출력된건 Pool에서 제거 한다. 그 후 화면에 요소들이 사라지면 Pool에 객체 요소가 아닌, holder를 통해 담기는데 이 때 그 요소를 구성하고 있는 객체의 ID만 담기기 때문에 메모리적으로 효율적이다.

layoutManager

RecyclerView의 항목을 어떻게 보여줄 것인가

  1. LinearLayoutManager : 위에서 아래 방향
  2. GridLayoutManager
  • 그리드/한 줄에 몇칸 사용할 지 정할 수 있음
  • 같은 행 모든 뷰가 같은 크기로 조정
  1. StaggeredGridLayoutManager
  • 그리드와 유사
  • 항목 View의 크키가 다를 경우 Grid는 같은 행의 모든 뷰가 같은 크기로 조정되지만 StaggerGrid는 항목 View의 크기는 필요한 만큼만 사용하고 화면에 빈칸이 없도록 배치를 조정해준다.

주요 이벤트

항목의 이벤트 처리는 viewHolder에서 할 수 있게 만들어준다.

profile
안녕하세요 😊

0개의 댓글