| page.title=Binding to Data with AdapterView |
| @jd:body |
| |
| <p>Some types of ViewGroup objects have a UI that is visible on the screen — {@link android.widget.AdapterView AdapterView} is one such object. AdapterView is a ViewGroup subclass whose child Views are determined by an {@link android.widget.Adapter Adapter} that binds to data of some type. AdapterView is useful whenever you need to display stored data (versus resource strings or drawables) in your layout.</p> |
| |
| <p>{@link android.widget.Gallery Gallery}, {@link android.widget.ListView ListView}, and {@link android.widget.Spinner Spinner} are examples of AdapterView subclasses that you can use to bind to a specific type of data and display it in a certain way. </p> |
| |
| |
| <p>AdapterView objects have two main responsibilities: </p> |
| <ul> |
| <li>Filling the layout with data |
| </li> |
| <li>Handling user selections |
| </li> |
| </ul> |
| |
| <p>The sections below describe how the AdapterView fulfills those responsibilities.</p> |
| |
| <h3> |
| Filling the layout with data |
| </h3> |
| |
| <p>This is typically done by binding the class to an {@link |
| android.widget.Adapter} that gets its data from somewhere — either a list that |
| the code supplies, or query results from the device's database. </p> |
| |
| <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 adatper |
| 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> |
| <h3> |
| Handling user selections |
| </h3> |
| <p> This is done 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> |