[kotlin] 리사이클러뷰에 다양한 아이템 뷰 타입 적용하기

안녕하세요! 이번 포스트에서는 안드로이드 앱에서 리사이클러뷰(RecyclerView)에 다양한 아이템 뷰 타입을 적용하는 방법에 대해 알아보겠습니다.

목차

다양한 아이템 뷰 타입 설정

리사이클러뷰에서 다양한 아이템 뷰 타입을 설정하기 위해서는 RecyclerView.Adapter를 상속한 어댑터 클래스에서 getItemViewType() 메소드를 오버라이드해야 합니다. 이 메소드를 통해 각 아이템 데이터에 맞는 뷰 타입을 반환할 수 있습니다.

override fun getItemViewType(position: Int): Int {
    return if (items[position].type == ItemType.TYPE_ONE) {
        TYPE_ONE
    } else {
        TYPE_TWO
    }
}

아이템 뷰 홀더(ViewHolder) 구성

각 아이템 뷰 타입에 대한 홀더를 구성해야 합니다. 예를 들어, 타입 1인 아이템에 대한 뷰 홀더와 타입 2인 아이템에 대한 뷰 홀더를 각각 정의해야 합니다.

class TypeOneViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
    // 타입 1에 대한 뷰 홀더 내용 구성
}

class TypeTwoViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
    // 타입 2에 대한 뷰 홀더 내용 구성
}

어댑터(Adapter)에서 아이템 뷰 타입 설정

마지막으로, 어댑터 클래스에서 onCreateViewHolder() 메소드를 오버라이드하여 각 아이템 뷰 타입에 따라 적절한 뷰 홀더를 생성하고, onBindViewHolder() 메소드를 통해 각 아이템에 대한 뷰 홀더를 바인딩해야 합니다.

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
    return when (viewType) {
        TYPE_ONE -> {
            val view = LayoutInflater.from(parent.context).inflate(R.layout.item_type_one, parent, false)
            TypeOneViewHolder(view)
        }
        TYPE_TWO -> {
            val view = LayoutInflater.from(parent.context).inflate(R.layout.item_type_two, parent, false)
            TypeTwoViewHolder(view)
        }
        else -> throw IllegalArgumentException("Invalid view type")
    }
}

override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
    when (holder) {
        is TypeOneViewHolder -> {
            // 타입 1에 대한 데이터 설정
        }
        is TypeTwoViewHolder -> {
            // 타입 2에 대한 데이터 설정
        }
        // ...
    }
}

이렇게 하면 리사이클러뷰에서 다양한 아이템 뷰 타입을 적용할 수 있습니다. 각각의 아이템이 다른 레이아웃과 UI를 가질 수 있어서 앱의 다양성을 향상시킬 수 있습니다.

리사이클러뷰의 다양한 아이템 뷰 타입 설정에 대해 알아보았습니다. 감사합니다!