|
class BannerAdapter(private val listener: OnCategoryClickListener) : |
|
ListAdapter<Banner, BannerAdapter.BannerViewHolder>(DiffCallBack()) { |
|
|
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BannerViewHolder { |
|
val binding = ItemRecyclerviewCategoriesSearchBinding.inflate( |
|
LayoutInflater.from(parent.context), |
|
parent, |
|
false |
|
) |
|
return BannerViewHolder(binding) |
|
} |
|
|
|
override fun onBindViewHolder(holder: BannerViewHolder, position: Int) { |
|
val currentItem = getItem(position) |
|
holder.bind(currentItem) |
|
} |
|
|
|
inner class BannerViewHolder(private val binding: ItemRecyclerviewCategoriesSearchBinding) : |
|
RecyclerView.ViewHolder(binding.root) { |
|
|
|
init { |
|
binding.root.setOnClickListener { |
|
val position = absoluteAdapterPosition |
|
if (position != RecyclerView.NO_POSITION){ |
|
val banner = getItem(position) |
|
listener.onCategoryClick(banner.link_type, banner.link) |
|
} |
|
} |
|
} |
|
|
|
fun bind(banner: Banner) { |
|
binding.apply { |
|
Glide.with(itemView.context) |
|
.load(banner.media.url) |
|
.centerCrop() |
|
.transition(DrawableTransitionOptions.withCrossFade()) |
|
.error(R.drawable.ic_broken_image) |
|
.into(imageCategory) |
|
} |
|
} |
|
} |
|
|
|
interface OnCategoryClickListener { |
|
fun onCategoryClick(type: String, link: String) |
|
} |
|
|
|
private class DiffCallBack : DiffUtil.ItemCallback<Banner>() { |
|
override fun areItemsTheSame(oldItem: Banner, newItem: Banner) = |
|
oldItem == newItem |
|
|
|
override fun areContentsTheSame(oldItem: Banner, newItem: Banner) = |
|
oldItem.media == newItem.media |
|
} |
|
} |