Skip to content

Instantly share code, notes, and snippets.

@yamidragut
Last active March 17, 2020 20:30
Show Gist options
  • Save yamidragut/3feed5bb7826f1e17e45e2d23a63a737 to your computer and use it in GitHub Desktop.
Save yamidragut/3feed5bb7826f1e17e45e2d23a63a737 to your computer and use it in GitHub Desktop.
RecyclerView ListAdapter with androidx and binding based in the one of Arif Khan: https://android.jlelse.eu/recylerview-list-adapter-template-in-kotlin-6b9814201458
#if (${PACKAGE_NAME} && ${PACKAGE_NAME} != "")package ${PACKAGE_NAME}#end
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.RecyclerView
class ${NAME}(private val onItemClickListener: (${Model_Class}) -> Unit) :
ListAdapter<${Model_Class}, ${NAME}.ItemViewHolder>(DiffCallback()) {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder =
${Item_Binding}.inflate(LayoutInflater.from(parent.context), parent, false)
.run { ItemViewHolder(this) }
override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
holder.bind(getItem(position), onItemClickListener)
}
inner class ItemViewHolder(private val binding: ${Item_Binding})
: RecyclerView.ViewHolder(binding.root) {
fun bind(item: ${Model_Class}, onItemClickListener: (${Model_Class}) -> Unit) {
with(item) {
// TODO: Bind the data with View
}
itemView.setOnClickListener {
onItemClickListener(item)
}
}
}
class DiffCallback : DiffUtil.ItemCallback<${Model_Class}>() {
override fun areItemsTheSame(oldItem: ${Model_Class}, newItem: ${Model_Class}) =
oldItem.id == newItem.id
override fun areContentsTheSame(oldItem: ${Model_Class}, newItem: ${Model_Class}) = oldItem == newItem
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment