본문 바로가기
Android

Recyclerview에 Header추가하는 방법

by kkong93 2023. 4. 18.
반응형
  1. RecyclerView에 헤더 뷰를 추가합니다.
  2. RecyclerView에 데이터 어댑터를 추가합니다.
  3. 어댑터에서 getItemViewType() 메서드를 오버라이드하여 헤더와 아이템을 구분하는 뷰 유형을 반환합니다.
  4. onCreateViewHolder() 메서드에서 뷰 홀더를 생성할 때, 뷰 유형에 따라서 헤더 뷰 또는 아이템 뷰를 생성합니다.
  5. onBindViewHolder() 메서드에서 뷰 홀더를 바인딩할 때, 헤더 뷰의 데이터를 설정합니다.
  6. getItemCount() 메서드에서는 아이템 수와 헤더를 포함한 전체 아이템 수를 반환합니다.
class MyAdapter(private val data: List<String>) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
    private val TYPE_HEADER = 0
    private val TYPE_ITEM = 1

    override fun getItemViewType(position: Int): Int {
        return if (position == 0) TYPE_HEADER else TYPE_ITEM
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
        return if (viewType == TYPE_HEADER) {
            val view = LayoutInflater.from(parent.context).inflate(R.layout.header_layout, parent, false)
            HeaderViewHolder(view)
        } else {
            val view = LayoutInflater.from(parent.context).inflate(R.layout.item_layout, parent, false)
            ItemViewHolder(view)
        }
    }

    override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
        if (holder is HeaderViewHolder) {
            holder.bind()
        } else {
            val itemPosition = position - 1
            val item = data[itemPosition]
            (holder as ItemViewHolder).bind(item)
        }
    }

    override fun getItemCount(): Int {
        return data.size + 1 // 헤더를 포함한 전체 아이템 수
    }

    inner class HeaderViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        fun bind() {
            // 헤더 뷰에 데이터를 설정하는 코드
        }
    }

    inner class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        fun bind(item: String) {
            // 아이템 뷰에 데이터를 설정하는 코드
        }
    }
}

위 코드에서 R.layout.header_layout은 헤더 뷰의 레이아웃 리소스를, R.layout.item_layout은 아이템 뷰의 레이아웃 리소스를 나타냅니다. bind() 메서드에서는 해당 뷰에 데이터를 설정하는 코드를 작성하면 됩니다.

반응형

댓글