Android 5.0 때 추가된 View 이다.
ListView와 GridView의 구현이 비슷한 부분이 많이 이를 통합한 View이다.
RecyclerView는Adapter를 직접 구현해 줘야 하며 이를 통해 항목을 자유롭게 구성할 수 있다.
RecyclerView는 반드시 항목들을 어떠한 형태로 보여줄 것인가를 설정해야 한다.
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는 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만 담기기 때문에 메모리적으로 효율적이다.
RecyclerView의 항목을 어떻게 보여줄 것인가
항목의 이벤트 처리는 viewHolder에서 할 수 있게 만들어준다.