Friday, August 14, 2015

How to get Spinner selected item text in Android

Get Spinner Selected Item Text
Spinner is a native android SDK widget. Spinner allows users to pick one item at a time from its items collection. The Spinner displays an item in its visible area. Others items remain hidden and can be visible by clicking on Spinner and those items displayed in a drop-down menu. By clicking on an item view users can set Spinner selected item.

In this android app development tutorial, we will demonstrate to you how can you get the Spinner selected item text programmatically and can show the text to app users. We can simply put a Spinner widget in our XML layout file by the Spinner tag and available attributes. But populating the Spinner element with views is a little more difficult. We have to do it in our java or kotlin scripting file.

The Spinner widget items came from an array adapter by using the Spinner setAdapter method. That array adapter was also built from an array list that was populated by an array of items. When the Spinner data binding finish then the Spinner widget shows the available items on its drop-down menu. Android app users then can select an item from the Spinner widget at a time and that item is shown in Spinner visible area then.

Now the actual problem is, how can we get the Spinner selected item text in our app interface programmatically. To do this, we have to implement the Spinner setOnItemSelectedListener interface. Here we need to override onItemSelected method. In this method, we will get the selected item text from the Spinner AdapterView by using its position. The following code snippets show the Spinner-selected item text in a toast message.
MainActivity.java

package com.cfsuman.androidtutorials;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;


public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Get the widgets reference from XML layout
        Spinner spinner = findViewById(R.id.spinner);


        // Initializing a String Array
        String[] plants = new String[]{
                "Laceflower",
                "California sycamore",
                "Mountain mahogany",
                "Butterfly weed",
                "Carrot weed"
        };


        // Convert array to a list
        List<String> plantsList = new ArrayList<>
                (Arrays.asList(plants));


        // Initializing an ArrayAdapter
        ArrayAdapter<String> spinnerArrayAdapter
                = new ArrayAdapter<String>(
                this,
                android.R.layout.simple_dropdown_item_1line,
                plantsList
        );


        // Set the drop down view resource
        spinnerArrayAdapter.setDropDownViewResource(
                android.R.layout.simple_dropdown_item_1line
        );


        // Set the spinner item selected listener
        spinner.setOnItemSelectedListener(
                new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(
                    AdapterView<?> parent, View view,
                    int position, long id) {

                // Get the spinner selected item text
                String selectedItemText = (String) parent
                        .getItemAtPosition(position);

                // Notify the selected item text
                Toast.makeText(
                        getApplicationContext(),
                                "Selected : " + selectedItemText,
                                Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });


        // Finally, data bind the spinner object with adapter
        spinner.setAdapter(spinnerArrayAdapter);
    }
}
activity_main.xml

<?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"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#DCDCDC"
    android:padding="64dp">

    <Spinner
        android:id="@+id/spinner"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>