[kotlin] 리사이클러뷰에 헤더(Header)와 푸터(Footer) 추가하기
먼저, 헤더와 푸터를 표시할 뷰 유형을 정의해야 합니다. 헤더와 푸터를 나타내는 뷰는 RecyclerView.ViewHolder
를 상속하는 새로운 클래스여야 합니다.
아래는 Kotlin으로 헤더와 푸터를 추가하는 방법의 예시입니다.
class HeaderViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
// 헤더 뷰 홀더
}
class FooterViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
// 푸터 뷰 홀더
}
class MyAdapter : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
private val TYPE_HEADER = 0
private val TYPE_ITEM = 1
private val TYPE_FOOTER = 2
// 헤더와 푸터가 있는지 여부에 따라 아이템 수를 반환
override fun getItemCount(): Int {
// 리스트 아이템 수 + 헤더/푸터
}
override fun getItemViewType(position: Int): Int {
return when(position) {
0 -> TYPE_HEADER
itemCount - 1 -> TYPE_FOOTER
else -> TYPE_ITEM
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
return when(viewType) {
TYPE_HEADER -> {
val headerView = LayoutInflater.from(parent.context).inflate(R.layout.header_layout, parent, false)
HeaderViewHolder(headerView)
}
TYPE_FOOTER -> {
val footerView = LayoutInflater.from(parent.context).inflate(R.layout.footer_layout, parent, false)
FooterViewHolder(footerView)
}
else -> {
// 기존 아이템 뷰 홀더 생성
}
}
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
when(holder) {
is HeaderViewHolder -> {
// 헤더 뷰 설정
}
is FooterViewHolder -> {
// 푸터 뷰 설정
}
else -> {
// 기존 아이템 뷰 설정
}
}
}
}
이 예제에서는 getItemViewType
메서드로 뷰 유형을 정의하고, onCreateViewHolder
메서드에 따라 각 뷰 타입에 맞는 뷰 홀더를 생성합니다. onBindViewHolder
를 사용하여 헤더, 푸터 및 기존 아이템의 내용을 설정합니다.
리사이클러뷰 어댑터를 구현하는 방법은 다양하며, 다른 방법으로도 헤더와 푸터를 추가할 수 있습니다. 하지만 이 방법은 가장 일반적이고 유연한 방법 중 하나입니다.