KOTLIN ANDROID APP DEVELOPMENT COURSE, RECYCLE VIEW – LIST SCREEN CONFIGURATION

User interface (UI) is a very important element in Android app development. The UI is what users encounter first when using the app, and it determines the user’s experience and satisfaction. In this tutorial, I will explain in detail how to create a list screen using Android’s RecyclerView. RecyclerView is a powerful UI component designed to efficiently display various amounts of data.

1. What is RecyclerView?

RecyclerView is the latest UI component included in the Android Support Library, and it is a powerful tool for efficiently displaying large amounts of data. It is similar to ListView but is differentiated by its superior performance and flexibility. RecyclerView uses the ViewHolder pattern to optimize UI performance and supports asynchronous scrolling through various layout managers.

2. Components of RecyclerView

  • Adapter: Manages the set of data to be displayed in the RecyclerView and binds the data to the view holders.
  • ViewHolder: Holds the views representing each item in the RecyclerView and optimizes memory usage.
  • LayoutManager: Determines how items in the RecyclerView are laid out and handles vertical/horizontal scrolling.

3. Creating a List Screen using RecyclerView

Now, let’s configure the list screen using RecyclerView through actual code. In this example, we will implement a simple contact list.

3.1 Project Setup

Create a new Android Studio project and add the RecyclerView dependency to the Gradle file.

implementation "androidx.recyclerview:recyclerview:1.2.1"

3.2 Layout Configuration

Now, let’s write the main layout XML file to display the RecyclerView.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:padding="16dp"
        android:clipToPadding="false"/>
</RelativeLayout>

3.3 Creating Data Model Class

Write a data model class to hold contact information.

data class Contact(val name: String, val phone: String)

3.4 Writing the ViewHolder Class

Implement the ViewHolder to structure the UI for each item.

class ContactViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
    val nameTextView: TextView = itemView.findViewById(R.id.nameTextView)
    val phoneTextView: TextView = itemView.findViewById(R.id.phoneTextView)
}

3.5 Implementing the Adapter Class

Connect RecyclerView with the data source through the Adapter.

class ContactAdapter(private val contacts: List) : RecyclerView.Adapter<ContactViewHolder>() {
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ContactViewHolder {
        val view = LayoutInflater.from(parent.context)
            .inflate(R.layout.item_contact, parent, false)
        return ContactViewHolder(view)
    }

    override fun onBindViewHolder(holder: ContactViewHolder, position: Int) {
        val contact = contacts[position]
        holder.nameTextView.text = contact.name
        holder.phoneTextView.text = contact.phone
    }

    override fun getItemCount(): Int {
        return contacts.size
    }
}

3.6 Linking RecyclerView

Link the RecyclerView and Adapter in the main activity.

class MainActivity : AppCompatActivity() {
    private lateinit var recyclerView: RecyclerView
    private lateinit var contactAdapter: ContactAdapter

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        recyclerView = findViewById(R.id.recyclerView)
        recyclerView.layoutManager = LinearLayoutManager(this)

        val contacts = listOf(
            Contact("John Doe", "123-456-7890"),
            Contact("Jane Smith", "987-654-3210"),
            Contact("Joe Bloggs", "543-210-9876")
        )

        contactAdapter = ContactAdapter(contacts)
        recyclerView.adapter = contactAdapter
    }
}

4. Going Further: Implementing Additional Features

Now that the basic RecyclerView implementation is complete, let’s implement some additional features to enhance the application.

4.1 Adding Click Listeners

Add click listeners to each list item to perform additional actions when clicked.

override fun onBindViewHolder(holder: ContactViewHolder, position: Int) {
    val contact = contacts[position]
    holder.nameTextView.text = contact.name
    holder.phoneTextView.text = contact.phone

    holder.itemView.setOnClickListener {
        Toast.makeText(holder.itemView.context, "Clicked: ${contact.name}", Toast.LENGTH_SHORT).show()
    }
}

4.2 Creating Item Layout

Design the item layout to display contact information.

<?xml version="1.0" encoding="utf-8" ?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="8dp">

    <TextView
        android:id="@+id/nameTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="18sp"
        android:textStyle="bold"/>

    <TextView
        android:id="@+id/phoneTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="14sp"/>

</LinearLayout>

4.3 Item Deletion Feature

You can implement a feature to delete specific items from the data list. Refer to the following code.

class ContactAdapter(private val contacts: MutableList) : RecyclerView.Adapter<ContactViewHolder>() {
    // ...

    // Add item removal method
    fun removeItem(position: Int) {
        contacts.removeAt(position)
        notifyItemRemoved(position)
    }
}

Now let’s add a feature to delete items when they are long pressed.

holder.itemView.setOnLongClickListener {
    removeItem(position)
    true
}

5. Conclusion

In this tutorial, we learned how to configure RecyclerView in an Android application using Kotlin. RecyclerView is a powerful tool capable of efficiently displaying large amounts of data and has significant advantages in flexibility and performance. By combining various components and features, you can build complex UIs tailored to real user experiences.

Now, based on what you’ve learned in this tutorial, try to integrate RecyclerView into your actual apps to manage and display various data.

References