Something I recently discovered is how easy it is to use Kotlin’s Android View extensions with RecyclerView ViewHolders. Previously using Butterknife, many of my ViewHolder classes were simply a bunch of @BindViews
with an init { ButterKnife.bind }
. With Kotlin Android extensions, the views are declared as extensions on the ViewHolder’s ItemView
field. Additionally, instead of declaring a ViewHolder
class with one line, you can actually just use an anonymous object in your onCreateViewHolder
method.
You could potentially use any of Kotlin’s scoping extension functions, I prefer to use let
, so here’s what that looks like (note also the this[...]
notation) :
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = object : RecyclerView.ViewHolder( context.inflate(R.layout.adapter_thread, parent) ) {} override fun onBindViewHolder(holder: ViewHolder, position: Int) { val item = this[position] holder.itemView.let { it.viewIdTitle = item.title it.viewIdDescription = item.description } }