Skip to content

Instantly share code, notes, and snippets.

@pedrojoya
Created August 15, 2019 12:44
Show Gist options
  • Save pedrojoya/9a6a44c13bc3c4505098b4cbddde8a49 to your computer and use it in GitHub Desktop.
Save pedrojoya/9a6a44c13bc3c4505098b4cbddde8a49 to your computer and use it in GitHub Desktop.
ListAdapterTemplate
#if (${PACKAGE_NAME} && ${PACKAGE_NAME} != "")package ${PACKAGE_NAME}#end
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.RecyclerView
class ${NAME} : ListAdapter<${Entity}, ${NAME}.ViewHolder>(
object ${Entity}DiffCallback : DiffUtil.ItemCallback<${Entity}>() {
override fun areItemsTheSame(oldItem: ${Entity}, newItem: ${Entity}): Boolean =
oldItem.id == newItem.id
override fun areContentsTheSame(oldItem: ${Entity}, newItem: ${Entity}): Boolean =
oldItem == newItem
}) {
private var onItemClickListener: ((position: Int) -> Unit)? = null
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val layoutInflater = LayoutInflater.from(parent.context)
val itemView = layoutInflater.inflate(R.layout.${LayoutName}, parent, false)
return ViewHolder(itemView, onItemClickListener)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.bind(getItem(position))
}
fun setOnItemClickListener(onItemClickListener: (position: Int) -> Unit) {
this.onItemClickListener = onItemClickListener
}
public override fun getItem(position: Int): ${Entity} = super.getItem(position)
class ViewHolder(override val containerView: View, onItemClickListener: ((position: Int) -> Unit)?) :
RecyclerView.ViewHolder(containerView), LayoutContainer {
init {
containerView.setOnClickListener {
val position = adapterPosition
if (position != RecyclerView.NO_POSITION) {
onItemClickListener?.invoke(position)
}
}
}
fun bind(item: ${Entity}) {
item.run {
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment