Skip to content

Instantly share code, notes, and snippets.

@alwarren
Last active April 15, 2019 10:32
Show Gist options
  • Save alwarren/cd2074f1a3268f07f767ac5b5b17c58b to your computer and use it in GitHub Desktop.
Save alwarren/cd2074f1a3268f07f767ac5b5b17c58b to your computer and use it in GitHub Desktop.
Kotlin RecyclerView.Adapter - credits to Fernando Cejas
class MyAdapter : RecyclerView.Adapter<ViewHolder>() {
var data: List<MyClass> by Delegates.observable(emptyList()) {
_, _, _ -> notifyDataSetChanged()
}
internal var clickListener: (MyClass) -> Unit = { }
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) =
ViewHolder(parent.inflate(R.layout.data_row))
override fun getItemCount() = data.size
override fun onBindViewHolder(viewHolder: ViewHolder, position: Int) =
viewHolder.bind(data[position], clickListener)
class ViewHolder(itemView: View): RecyclerView.ViewHolder(itemView) {
fun bind(item: MyClass, clickListener: (MyClass) -> Unit) {
// do all the view bindings and set the listener
itemView.setOnClickListener { clickListener(item) }
}
}
}
fun ViewGroup.inflate(@LayoutRes layoutRes: Int): View =
LayoutInflater.from(context).inflate(layoutRes, this, false)
private fun initializeView() {
// set layout manager here or in the layout xml
myRecyclerView.adapter = myAdapter
myAdapter.clickListener = { data ->
// do something with data
// like change something or navigate
}
}
private fun renderData(items: List<MyClass>?) {
myAdapter.data = items.orEmpty()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment