Skip to content

Instantly share code, notes, and snippets.

@Kaaveh
Created June 9, 2022 08:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Kaaveh/0ce65a51261a2cb6940270697fb5712a to your computer and use it in GitHub Desktop.
Save Kaaveh/0ce65a51261a2cb6940270697fb5712a to your computer and use it in GitHub Desktop.
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
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment