Skip to content

Instantly share code, notes, and snippets.

@ShkurtiA
Last active October 9, 2018 13:47
Show Gist options
  • Save ShkurtiA/e07c19c832008c1b0365355457c66831 to your computer and use it in GitHub Desktop.
Save ShkurtiA/e07c19c832008c1b0365355457c66831 to your computer and use it in GitHub Desktop.
Adapter delegate implementation example
class OverviewAdapter(val list: List<DisplayableItem>, clickListener: OnItemClickListener) : ListDelegationAdapter<List<DisplayableItem>>() {
init {
delegatesManager.addDelegate(PhotoItemDelegate(clickListener))
delegatesManager.addDelegate(ButtonItemDelegate(clickListener))
setItems(list)
}
}
class PhotoItemDelegate(private val clickListener: OnItemClickListener) : AbsListItemAdapterDelegate<PhotoItem, DisplayableItem, PhotoItemDelegate.ViewHolder>() {
override fun isForViewType(item: DisplayableItem, items: MutableList<DisplayableItem>, position: Int): Boolean {
return item is PhotoItem
}
override fun onCreateViewHolder(parent: ViewGroup): ViewHolder {
return ViewHolder(parent.inflate(R.layout.item_overview_photo))
.apply {
editButton.setOnClickListener { view ->
clickListener.onItemClick(view!!, adapterPosition)
}
}
}
override fun onBindViewHolder(item: PhotoItem, viewHolder: ViewHolder, payloads: MutableList<Any>) {
viewHolder.titleView.text = item.title
GlideApp.with(viewHolder.itemView)
.load(File(viewHolder.itemView.context.filesDir, item.fileName))
.centerCrop()
.into(viewHolder.photoView)
}
class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val titleView: TextView = itemView.titleText
val photoView: ImageView = itemView.imageView
val editButton: ImageView = itemView.editBtn
}
}
//extension method
fun ViewGroup.inflate(layoutRes: Int): View {
return LayoutInflater.from(context).inflate(layoutRes, this, false)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment