Skip to main content

How to dynamically update the contents of a Spinner in Kotlin Android

How to dynamically update the contents of a Spinner in Kotlin Android.

Here's a step-by-step tutorial on how to dynamically update the contents of a Spinner in Kotlin Android.

Step 1: Create a new Android project​

To get started, open Android Studio and create a new Android project. Choose an appropriate project name, package name, and minimum SDK version.

Step 2: Add a Spinner to the layout​

Open the layout file (usually activity_main.xml) and add a Spinner element to it. Give it an id attribute for easy reference in code. For example:

<Spinner
android:id="@+id/spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp" />

Step 3: Create an ArrayAdapter​

In the activity or fragment where you want to use the Spinner, create an ArrayAdapter to hold the data for the Spinner. You can use a simple ArrayAdapter or create a custom one if needed. For example:

val data = listOf("Option 1", "Option 2", "Option 3")
val adapter = ArrayAdapter(this, android.R.layout.simple_spinner_item, data)

Step 4: Set the ArrayAdapter on the Spinner​

Get a reference to the Spinner in code using its id, and set the ArrayAdapter on it. This will populate the Spinner with the initial data. For example:

val spinner = findViewById<Spinner>(R.id.spinner)
spinner.adapter = adapter

Step 5: Update the data in the ArrayAdapter​

To dynamically update the contents of the Spinner, update the data in the ArrayAdapter and call the notifyDataSetChanged() method to notify the Spinner that the data has changed. For example:

// Add a new option to the data list
data.add("Option 4")

// Notify the adapter that the data has changed
adapter.notifyDataSetChanged()

Step 6: Handle item selection​

If you want to perform some action when an item is selected in the Spinner, you can set an OnItemSelectedListener on the Spinner. For example:

spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(parent: AdapterView<*>, view: View?, position: Int, id: Long) {
val selectedItem = parent.getItemAtPosition(position) as String
// Do something with the selected item
}

override fun onNothingSelected(parent: AdapterView<*>) {
// Do something when nothing is selected
}
}

That's it! You now know how to dynamically update the contents of a Spinner in Kotlin Android. Feel free to experiment with different data sources and adapter types to suit your needs.