Mohamed Ibrahim
08/04/2020, 8:42 PMConcateadapter
sealed class ButtonsAdapterType(val isEnabled: Boolean) {
open fun areItemsTheSame(other: ButtonsAdapterType): Boolean = this == other
open fun areContentsTheSame(oldItem: ButtonsAdapterType): Boolean = this == oldItem
data class ReviewButtonItem(val enabled: Boolean) : ButtonsAdapterType(enabled)
data class AddNewButtonItem(val enabled: Boolean) : ButtonsAdapterType(enabled)
data class CheckOutButtonItem(val enabled: Boolean) : ButtonsAdapterType(enabled)
}
class OrderButtonsAdapter(private val navigation: Navigation) :
ListAdapter<ButtonsAdapterType, RecyclerView.ViewHolder>(diffUtil) {
companion object {
private val diffUtil = object : DiffUtil.ItemCallback<ButtonsAdapterType>() {
override fun areItemsTheSame(
oldItem: ButtonsAdapterType,
newItem: ButtonsAdapterType
): Boolean = newItem.areItemsTheSame(oldItem)
override fun areContentsTheSame(
oldItem: ButtonsAdapterType,
newItem: ButtonsAdapterType
): Boolean = newItem.areContentsTheSame(oldItem)
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
return when (viewType) {
ButtonsViewType.REVIEW.id -> GoToReviewPageViewHolder(parent)
ButtonsViewType.CHECKOUT.id -> CheckOutButtonViewHolder(parent)
ButtonsViewType.ADD_NEW.id -> AddItemButtonViewHolder(parent, navigation)
else -> throw NotImplementedError()
}
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
val enabled = getItem(position).isEnabled
when (holder) {
is GoToReviewPageViewHolder -> holder.bind(enabled)
is CheckOutButtonViewHolder -> holder.bind(enabled)
is AddItemButtonViewHolder -> holder.bind(enabled)
}
}
override fun getItemViewType(position: Int): Int {
return when (getItem(position)) {
is ButtonsAdapterType.AddNewButtonItem -> ButtonsViewType.ADD_NEW.id
is ButtonsAdapterType.CheckOutButtonItem -> ButtonsViewType.CHECKOUT.id
is ButtonsAdapterType.ReviewButtonItem -> ButtonsViewType.REVIEW.id
else -> -1
}
}
}
private enum class ButtonsViewType(val id: Int) {
REVIEW(100), CHECKOUT(200), ADD_NEW(300)
}
I did similar one for regular items, what do you think