개발/Android

RecyclerView ViewType 분기

지산동고라니 2022. 9. 12. 16:19

Data 클래스의 한 값을 기준으로 해서 서로 다른 레이아웃으로 분기하는 Adapter

class CrimeListAdapter(val crimes: List<Crime>) : RecyclerView.Adapter<ViewHolder>() {
    enum class ViewTypeEnum(val num: Int) {
        CRUCIAL(1),
        NORMAL(0)
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        val inflater = LayoutInflater.from(parent.context)
        val viewHolder: ViewHolder = when(viewType){
            0 -> {
                val binding = ListItemCrimeBinding.inflate(inflater, parent, false)
                CrimeHolder(binding)
            }
            else -> {
                val binding = ListItemCrucialCrimeBinding.inflate(inflater, parent, false)
                CrucialCrimeHolder(binding)
            }
        }
        return viewHolder

    }

    override fun getItemCount() = crimes.size
    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        val crime = crimes[position]
        if(holder is CrucialCrimeHolder){
            holder.bind(crime)
        }
        else if(holder is CrimeHolder){
            holder.bind(crime)
        }
    }

    override fun getItemViewType(position: Int): Int {
        return if (crimes[position].requiresPolice) ViewTypeEnum.CRUCIAL.num else ViewTypeEnum.NORMAL.num
    }
}