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.

Documentation

Add Gradle dependency

dependencies {
    implementation 'com.android.support:recyclerview-v7:28.0.0'
}

Custom Adapter

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
        }
    }
}

Activity changes

//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()
}

Add RecyclerView to your layout

<?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"/>
⚠️ **GitHub.com Fallback** ⚠️