page.title=Spinners
page.tags=adapterview,spinneradapter
@jd:body

<div id="qv-wrapper">
<div id="qv">
  
<h2>In this document</h2>
<ol>
  <li><a href="#Populate">Populate the Spinner with User Choices</a></li>
  <li><a href="#SelectListener">Responding to User Selections</a></li>
</ol>
<h2>Key classes</h2>
<ol>
  <li>{@link android.widget.Spinner}</li>
  <li>{@link android.widget.SpinnerAdapter}</li>
  <li>{@link android.widget.AdapterView.OnItemSelectedListener}</li>
</ol>

</div>
</div>

<p>Spinners provide a quick way to select one value from a set. In the default state, a spinner
shows its currently selected value. Touching the spinner displays a dropdown menu with all other
available values, from which the user can select a new one.</p>

<img src="{@docRoot}images/ui/spinner.png" alt="" />

<p>You can add a spinner to your layout with the {@link android.widget.Spinner} object. You
should usually do so in your XML layout with a {@code &lt;Spinner&gt;} element. For example:</p>

<pre>
&lt;Spinner
    android:id="@+id/planets_spinner"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" />
</pre>

<p>To populate the spinner with a list of choices, you then need to specify a {@link
android.widget.SpinnerAdapter} in your {@link android.app.Activity} or {@link android.app.Fragment}
source code.</p>

<h2 id="Populate">Populate the Spinner with User Choices</h2>

<p>The choices you provide for the spinner can come from any source, but must be provided through
an {@link android.widget.SpinnerAdapter}, such as an {@link android.widget.ArrayAdapter} if the
choices are available in an array or a {@link android.widget.CursorAdapter} if the choices are
available from a database query.</p>

<p>For instance, if the available choices for your spinner are pre-determined, you can provide
them with a string array defined in a <a
href="{@docRoot}guide/topics/resources/string-resource.html">string
resource file</a>:</p>

<pre>
&lt;?xml version="1.0" encoding="utf-8"?>
&lt;resources>
    &lt;string-array name="planets_array">
        &lt;item>Mercury&lt;/item>
        &lt;item>Venus&lt;/item>
        &lt;item>Earth&lt;/item>
        &lt;item>Mars&lt;/item>
        &lt;item>Jupiter&lt;/item>
        &lt;item>Saturn&lt;/item>
        &lt;item>Uranus&lt;/item>
        &lt;item>Neptune&lt;/item>
    &lt;/string-array>
&lt;/resources>
</pre>

  <p>With an array such as this one, you can use the following code in your {@link
android.app.Activity} or {@link android.app.Fragment} to supply the spinner with the array using
an instance of {@link android.widget.ArrayAdapter}:

<pre>
Spinner spinner = (Spinner) findViewById(R.id.spinner);
// Create an ArrayAdapter using the string array and a default spinner layout
ArrayAdapter&lt;CharSequence> adapter = ArrayAdapter.createFromResource(this,
        R.array.planets_array, android.R.layout.simple_spinner_item);
// Specify the layout to use when the list of choices appears
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// Apply the adapter to the spinner
spinner.setAdapter(adapter);
</pre>

<p>The {@link
android.widget.ArrayAdapter#createFromResource(Context,int,int) createFromResource()} method allows
you to create an {@link  android.widget.ArrayAdapter} from the string array. The third argument for
this method is a layout resource that defines how the selected choice appears in the
spinner control. The {@link android.R.layout#simple_spinner_item} layout is provided by the
platform and is the default layout you should use unless you'd like to define your own layout
for the spinner's appearance.</p>

<p>You should then call {@link android.widget.ArrayAdapter#setDropDownViewResource(int)} to specify
the layout the adapter should use to display the list of spinner choices ({@link
android.R.layout#simple_spinner_dropdown_item} is another standard layout defined by the
platform).</p>

<p>Call {@link android.widget.AdapterView#setAdapter setAdapter()} to apply the adapter to your
{@link android.widget.Spinner}.</p>


<h2 id="SelectListener">Responding to User Selections</h2>

<p>When the user selects an item from the drop-down, the {@link android.widget.Spinner} object
receives an on-item-selected event.</p>

<p>To define the selection event handler for a spinner, implement the {@link
android.widget.AdapterView.OnItemSelectedListener} interface and the corresponding {@link
android.widget.AdapterView.OnItemSelectedListener#onItemSelected onItemSelected()} callback method.
For example, here's an implementation of the interface in an {@link android.app.Activity}:</p>

<pre>
public class SpinnerActivity extends Activity implements OnItemSelectedListener {
    ...
    
    public void onItemSelected(AdapterView&lt;?> parent, View view, 
            int pos, long id) {
        // An item was selected. You can retrieve the selected item using
        // parent.getItemAtPosition(pos)
    }

    public void onNothingSelected(AdapterView&lt;?> parent) {
        // Another interface callback
    }
}
</pre>

<p>The {@link android.widget.AdapterView.OnItemSelectedListener} requires the {@link
android.widget.AdapterView.OnItemSelectedListener#onItemSelected(AdapterView,View,int,long)
onItemSelected()} and {@link
android.widget.AdapterView.OnItemSelectedListener#onNothingSelected(AdapterView)
onNothingSelected()} callback methods.</p>

<p>Then you need to specify the interface implementation by calling {@link
android.widget.AdapterView#setOnItemSelectedListener setOnItemSelectedListener()}:</p>

<pre>
Spinner spinner = (Spinner) findViewById(R.id.spinner);
spinner.setOnItemSelectedListener(this);
</pre>

<p>If you implement the {@link
android.widget.AdapterView.OnItemSelectedListener} interface with your {@link
android.app.Activity} or {@link android.app.Fragment} (such as in the example above), you can pass
<code>this</code> as the interface instance.</p>
