page.title=AdapterView parent.title=User Interface parent.link=index.html @jd:body <div id="qv-wrapper"> <div id="qv"> <h2>In this document</h2> <ol> <li><a href="#FillingTheLayout">Filling the Layout with Data</a></li> <li><a href="#HandlingUserSelections">Handling User Selections</a></li> </ol> </div> </div> <pre> // Get a Spinner and bind it to an ArrayAdapter that // references a String array. Spinner s1 = (Spinner) findViewById(R.id.spinner1); ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource( this, R.array.colors, android.R.layout.simple_spinner_item); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); s1.setAdapter(adapter); // Load a Spinner and bind it to a data query. private static String[] PROJECTION = new String[] { People._ID, People.NAME }; Spinner s2 = (Spinner) findViewById(R.id.spinner2); Cursor cur = managedQuery(People.CONTENT_URI, PROJECTION, null, null); SimpleCursorAdapter adapter2 = new SimpleCursorAdapter(this, android.R.layout.simple_spinner_item, // Use a template // that displays a // text view cur, // Give the cursor to the list adapter new String[] {People.NAME}, // Map the NAME column in the // people database to... new int[] {android.R.id.text1}); // The "text1" view defined in // the XML template adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); s2.setAdapter(adapter2); </pre> <p>Note that it is necessary to have the People._ID column in projection used with CursorAdapter or else you will get an exception.</p> <p>If, during the course of your application's life, you change the underlying data that is read by your Adapter, you should call {@link android.widget.ArrayAdapter#notifyDataSetChanged()}. This will notify the attached View that the data has been changed and it should refresh itself.</p> <h2 id="HandlingUserSelections">Handling User Selections</h2> <p>You handle the user's selection by setting the class's {@link android.widget.AdapterView.OnItemClickListener} member to a listener and catching the selection changes. </p> <pre> // Create a message handling object as an anonymous class. private OnItemClickListener mMessageClickedHandler = new OnItemClickListener() { public void onItemClick(AdapterView parent, View v, int position, long id) { // Display a messagebox. Toast.makeText(mContext,"You've got an event",Toast.LENGTH_SHORT).show(); } }; // Now hook into our object and set its onItemClickListener member // to our class handler object. mHistoryView = (ListView)findViewById(R.id.history); mHistoryView.setOnItemClickListener(mMessageClickedHandler); </pre> <div class="special"> <p>For more discussion on how to create different AdapterViews, read the following guides: <a href="{@docRoot}guide/topics/ui/controls/spinner.html">Spinner</a>, <a href="{@docRoot}guide/topics/ui/layout/listview.html">List View</a>, and <a href="{@docRoot}guide/topics/ui/layout/gridview.html">Grid View</a>. </div>