Spinner is a widget similar to a drop-down list for selecting items.
In this tutorial, you'll create a simple spinner widget that displays a list of planets. When one is selected, a toast message will display the selected item.
- Start a new project named HelloSpinner.
- Open the
res/layout/main.xmlfile and insert the following:<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:padding="10dip" android:layout_width="fill_parent" android:layout_height="wrap_content"> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="10dip" android:text="@string/planet_prompt" /> <Spinner android:id="@+id/spinner" android:layout_width="fill_parent" android:layout_height="wrap_content" android:prompt="@string/planet_prompt" /> </LinearLayout>Notice that the
TextView'sandroid:textattribute and theSpinner'sandroid:promptattribute both reference the same string resource. This text behaves as a title for the widget. When applied to theSpinner, the title text will appear in the selection dialog that appears upon selecting the widget. - Create a
strings.xmlfile inres/values/and edit the file to look like this:<?xml version="1.0" encoding="utf-8"?> <resources> <string name="planet_prompt">Choose a planet</string> <string-array name="planets_array"> <item>Mercury</item> <item>Venus</item> <item>Earth</item> <item>Mars</item> <item>Jupiter</item> <item>Saturn</item> <item>Uranus</item> <item>Neptune</item> </string-array> </resources>The
<string>element defines the title string referenced by theTextViewandSpinnerin the layout above. The<string-arrayelement defines the list of strings that will be displayed as the list in theSpinnerwidget. - Now open the
HelloSpinner.javafile and insert the following code for theonCreate()method:@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Spinner spinner = (Spinner) findViewById(R.id.spinner); ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource( this, R.array.planets_array, android.R.layout.simple_spinner_item); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner.setAdapter(adapter); }After the
main.xmllayout is set as the content view, theSpinnerwidget is captured from the layout withfindViewById(int). ThecreateFromResource()method then creates a newArrayAdapter, which binds each item in the string array to the initial appearance for theSpinner(which is how each item will appear in the spinner when selected). TheR.array.planets_arrayID references thestring-arraydefined above and theandroid.R.layout.simple_spinner_itemID references a layout for the standard spinner appearance, defined by the platform. ThensetDropDownViewResource(int)is called to define the appearance for each item when the widget is opened (simple_spinner_dropdown_itemis another standard layout defined by the platform). Finally, theArrayAdapteris set to associate all of its items with theSpinnerby callingsetAdapter(T). - Now create a nested class that implements
AdapterView.OnItemSelectedListener. This will provide a callback method that will notify your application when an item has been selected from theSpinner. Here's what this class should look like:public class MyOnItemSelectedListener implements OnItemSelectedListener { public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { Toast.makeText(parent.getContext(), "The planet is " + parent.getItemAtPosition(pos).toString(), Toast.LENGTH_LONG).show(); } public void onNothingSelected(AdapterView> parent) { // Do nothing. } }The
AdapterView.OnItemSelectedListenerrequires theonItemSelected()andonNothingSelected()callback methods. The former is called when an item from theAdapterViewis selected, in which case, a shortToastmessage displays the selected text; and the latter is called when a selection disappears from theAdapterView, which doesn't happen in this case, so it's ignored. - Now the
MyOnItemSelectedListenerneeds to be applied to theSpinner. Go back to theonCreate()method and add the following line to the end:spinner.setOnItemSelectedListener(new MyOnItemSelectedListener());This creates a new anonymous instance of the
MyOnItemSelectedListenerand sets it as the listener for theSpinner. - Run the application.
It should look like this:
