Skip to content

Instantly share code, notes, and snippets.

@onatakduman
Created July 23, 2019 19:25
Show Gist options
  • Save onatakduman/fa72fbbdae5768f6e84052db9fb70235 to your computer and use it in GitHub Desktop.
Save onatakduman/fa72fbbdae5768f6e84052db9fb70235 to your computer and use it in GitHub Desktop.
RecyclerView Adapter Template (Kotlin)
#if (${PACKAGE_NAME} && ${PACKAGE_NAME} != "")package ${PACKAGE_NAME}#end
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.RecyclerView
#parse("File Header.java")
class ${Adapter_Name} : RecyclerView.Adapter<${Adapter_Name}.ViewHolder>() {
private var list: MutableList<${Model_Class}> = mutableListOf()
lateinit var onClickListener: OnClickListener
interface OnClickListener {
fun onClick(item: ${Model_Class})
}
fun setOnClickListener(listener: (${Model_Class}) -> Unit) {}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
return ViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.${Item_Layout_ID}, parent, false))
}
override fun getItemCount() = list.size
override fun onBindViewHolder(holder: ViewHolder, position: Int) = holder.bind(list[position],this.onClickListener)
fun updateList(newList: List<${Model_Class}>) {
val diffResult: DiffUtil.DiffResult = DiffUtil.calculateDiff(DiffUtilCallback(newList.toMutableList(), this.list))
list.clear()
list.addAll(newList)
diffResult.dispatchUpdatesTo(this)
}
class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
fun bind(item: ${Model_Class}, onClickListener: OnClickListener) = with(itemView) {
setOnClickListener {
onClickListener.onClick(item)
}
}
}
class DiffUtilCallback(private var newList: MutableList<${Model_Class}>, private var oldList: MutableList<${Model_Class}>) : DiffUtil.Callback() {
override fun areItemsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean {
return newList[newItemPosition].name == oldList[oldItemPosition].name
}
override fun getOldListSize(): Int {
return oldList.size
}
override fun getNewListSize(): Int {
return newList.size
}
override fun areContentsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean {
return newList[newItemPosition].image == oldList[oldItemPosition].image
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment