package com.looker.droidify.widget import android.util.SparseArray import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView abstract class EnumRecyclerAdapter, VH : RecyclerView.ViewHolder> : RecyclerView.Adapter() { abstract val viewTypeClass: Class private val names = SparseArray() private fun getViewType(viewType: Int): VT { return java.lang.Enum.valueOf(viewTypeClass, names.get(viewType)) } final override fun getItemViewType(position: Int): Int { val enum = getItemEnumViewType(position) names.put(enum.ordinal, enum.name) return enum.ordinal } final override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): VH { return onCreateViewHolder(parent, getViewType(viewType)) } abstract fun getItemEnumViewType(position: Int): VT abstract fun onCreateViewHolder(parent: ViewGroup, viewType: VT): VH }