Skip to content

Instantly share code, notes, and snippets.

@m7mdra
Created October 2, 2022 10:48
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 m7mdra/081be1db632d136d35e866a8c89a2942 to your computer and use it in GitHub Desktop.
Save m7mdra/081be1db632d136d35e866a8c89a2942 to your computer and use it in GitHub Desktop.
Simple list Recycler view adapter that support single item type
SimpleList(list = it.list,
viewHolderCreate = {
ItemViewHolder(
RowItemBinding.inflate(
layoutInflater,
it,
false
)
)
},
bindCallback = { viewHolder: ItemViewHolder, item: Item, i: Int ->
viewHolder.itemNameTextView.text = item.name
},
clickCallback = { i: Int, item: Item ->
})
typealias BindCallback<T, ViewHolder> = (ViewHolder, T, Int) -> Unit
typealias ViewHolderCreate<ViewHolder> = (ViewGroup) -> ViewHolder
typealias ClickCallback<T> = (Int, T) -> Unit
class SimpleList<T, ViewHolder : RecyclerView.ViewHolder>(
private val list: List<T>,
private val viewHolderCreate: ViewHolderCreate<ViewHolder>,
private val bindCallback: BindCallback<T, ViewHolder>? = null,
private val clickCallback: ClickCallback<T>? = null
) : RecyclerView.Adapter<ViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
return viewHolderCreate(parent)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.itemView.setOnClickListener {
clickCallback?.invoke(position, list[position])
}
bindCallback?.invoke(holder, list[position], position)
}
override fun getItemCount(): Int = list.size
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment