RecyclerView - jorgepascoPE/Kotlin-snippets GitHub Wiki
If your app needs to display a scrolling list of elements based on large data sets (or data that frequently changes), you should use RecyclerView as described on this page.
dependencies {
implementation 'com.android.support:recyclerview-v7:28.0.0'
}
class CustomAdapter(val context: Context, val fooArray: ArrayList<fooObject>) : RecyclerView.Adapter<CustomAdapter.ViewHolder>() {
override fun getItemCount(): Int {
return fooArray.count()
}
override fun onBindViewHolder(holder: ViewHolder?, position: Int) {
holder?.bindSomething(context, fooArray[position])
}
override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ViewHolder {
val view = LayoutInflater.from(context).inflate(R.layout.custom_view, parent, false)
return ViewHolder(view)
}
inner class ViewHolder(itemView: View?) : RecyclerView.ViewHolder(itemView) {
val fooUiElement = itemView?.findViewById<ImageView>(R.id.fooId)
val fooUiElement2 = itemView?.findViewById<ImageView>(R.id.fooId2)
fun bindMessage(context: Context, fooObject: customObject) {
val resourceId = context.resources.getIdentifier(fooObject.fooAttribute, "typeOfElement, drawable", context.packageName)
fooUiElement?.setFooProperty(resourceId)
fooUiElement2?.fooTextProperty = fooObject.textProperty
}
}
}
//onMainActivity
private fun setupAdapters() {
fooAdapter = CustomAdapter(this, ArrayOfObjects)
uiViewId.adapter = fooAdapter
//RecyclerView needs layout manager
val layoutManager = LinearLayoutManager(this)
uiViewId.layoutManager = layoutManager
}
override fun onCreate(savedInstanceState: Bundle?) {
setupAdapters()
}
<?xml version="1.0" encoding="utf-8"?>
<!-- A RecyclerView with some commonly used attributes -->
<android.support.v7.widget.RecyclerView
android:id="@+id/my_recycler_view"
android:scrollbars="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"/>