Last active
April 15, 2019 10:32
-
-
Save alwarren/cd2074f1a3268f07f767ac5b5b17c58b to your computer and use it in GitHub Desktop.
Kotlin RecyclerView.Adapter - credits to Fernando Cejas
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
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) } | |
} | |
} | |
} |
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
fun ViewGroup.inflate(@LayoutRes layoutRes: Int): View = | |
LayoutInflater.from(context).inflate(layoutRes, this, false) |
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
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