개발/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
}
}