Created
March 10, 2019 07:26
-
-
Save NezSpencer/9edebfc4d2f50973c5bd11bba6a8194e to your computer and use it in GitHub Desktop.
Recyclerview adapter with the header-footer pattern applied
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
inner class ItemAdapter(private val list: MutableList<String>) : RecyclerView.Adapter<RecyclerView.ViewHolder>() { | |
private val itemHeader = 20 | |
private val itemBody = 21 | |
private val itemFooter = 22 | |
override fun onCreateViewHolder(p0: ViewGroup, p1: Int): RecyclerView.ViewHolder { | |
return when(p1){ | |
itemHeader -> HeaderHolder(ItemHeaderBinding.inflate(LayoutInflater.from(p0.context), p0, false)) | |
itemBody -> BodyHolder(ItemNameBinding.inflate(LayoutInflater.from(p0.context), p0, false)) | |
else -> FooterHolder(ItemFooterBinding.inflate(LayoutInflater.from(p0.context), p0, false)) | |
} | |
} | |
override fun getItemCount(): Int = list.size | |
override fun onBindViewHolder(p0: RecyclerView.ViewHolder, p1: Int) { | |
if (p0.adapterPosition == 0 || p0.adapterPosition == list.size - 1) | |
return | |
val body : BodyHolder = p0 as BodyHolder | |
body.binding.tvName.text = list[p0.adapterPosition] | |
} | |
override fun onViewRecycled(holder: RecyclerView.ViewHolder) { | |
super.onViewRecycled(holder) | |
Log.d("onViewRecycled", "view ${holder.adapterPosition} recycled") | |
} | |
override fun getItemViewType(position: Int): Int { | |
return when (position) { | |
0 -> itemHeader | |
list.size - 1 -> itemFooter | |
else -> itemBody | |
} | |
} | |
} | |
inner class HeaderHolder(val binding : ItemHeaderBinding) : RecyclerView.ViewHolder(binding.root) | |
inner class BodyHolder(val binding : ItemNameBinding) : RecyclerView.ViewHolder(binding.root) | |
inner class FooterHolder(val binding : ItemFooterBinding) : RecyclerView.ViewHolder(binding.root) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment