If you want implement a simple drop down list. Here you go.
Spinner is used to select one value from a set of values in Android. Android Spinner is associated with AdapterView, so that we need to set a adapter class with the Spinner.
Let’s code!
It consists of a TextView and a Spinner in the following layout file:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/tvSelectedItem"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="Hello World!"
android:gravity="center"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Spinner
android:id="@+id/spDropdownList"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvSelectedItem"/>
</androidx.constraintlayout.widget.ConstraintLayout>
Following snippet shows how to associate a adapter to Spinner:
private fun prepareSpinnerAdapter(){
spinnerAdapter = ArrayAdapter(this@MainActivity,android.R.layout.simple_spinner_dropdown_item,spinnerDropdownList)
spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
spinner.adapter = spinnerAdapter
spinner.onItemSelectedListener = object: AdapterView.OnItemSelectedListener{
override fun onItemSelected(
parent: AdapterView<*>?,
view: View?,
position: Int,
id: Long
) {
tvSelectedItem.text = parent?.getItemAtPosition(position).toString()
}
override fun onNothingSelected(parent: AdapterView<*>?) {
TODO("Not yet implemented")
}
}
}
We register a listener to Spinner. It gets the value selected by clicking.It’ll show on the TextView component.
Following code is to prepare data for Spinner:
private fun prepareDataForSpinner(){
for(i in 1 until 10){
spinnerDropdownList.add("Item $i")
}
}
All code of MainActivity.java is here:
package com.example.dropdownlist
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.AdapterView
import android.widget.ArrayAdapter
import android.widget.Spinner
import android.widget.TextView
class MainActivity : AppCompatActivity() {
private lateinit var tvSelectedItem: TextView
private lateinit var spinner:Spinner
private val spinnerDropdownList:MutableList<String> = mutableListOf()
private lateinit var spinnerAdapter:ArrayAdapter<String>
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
spinner = findViewById(R.id.spDropdownList)
tvSelectedItem = findViewById(R.id.tvSelectedItem)
prepareDataForSpinner()
prepareSpinnerAdapter()
}
private fun prepareDataForSpinner(){
for(i in 1 until 10){
spinnerDropdownList.add("Item $i")
}
}
private fun prepareSpinnerAdapter(){
spinnerAdapter = ArrayAdapter(this@MainActivity,android.R.layout.simple_spinner_dropdown_item,spinnerDropdownList)
spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
spinner.adapter = spinnerAdapter
spinner.onItemSelectedListener = object: AdapterView.OnItemSelectedListener{
override fun onItemSelected(
parent: AdapterView<*>?,
view: View?,
position: Int,
id: Long
) {
tvSelectedItem.text = parent?.getItemAtPosition(position).toString()
}
override fun onNothingSelected(parent: AdapterView<*>?) {
TODO("Not yet implemented")
}
}
}
}