[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를 사용하여 헤더, 푸터 및 기존 아이템의 내용을 설정합니다.

리사이클러뷰 어댑터를 구현하는 방법은 다양하며, 다른 방법으로도 헤더와 푸터를 추가할 수 있습니다. 하지만 이 방법은 가장 일반적이고 유연한 방법 중 하나입니다.