114 lines
5.0 KiB
Plaintext
114 lines
5.0 KiB
Plaintext
|
page.title=Binding to Data with 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>
|
||
|
|
||
|
<h2>Related tutorials</h2>
|
||
|
<ol>
|
||
|
<li><a href="{@docRoot}resources/tutorials/views/hello-spinner.html">Spinner</a></li>
|
||
|
<li><a href="{@docRoot}resources/tutorials/views/hello-listview.html">List View</a></li>
|
||
|
<li><a href="{@docRoot}resources/tutorials/views/hello-gridview.html">Grid View</a></li>
|
||
|
</ol>
|
||
|
</div>
|
||
|
</div>
|
||
|
|
||
|
<p>The {@link android.widget.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 (as opposed to 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>
|
||
|
|
||
|
|
||
|
<h2 id="FillingTheLayout">Filling the Layout with Data</h2>
|
||
|
<p>Inserting data into the layout is typically done by binding the AdapterView class to an {@link
|
||
|
android.widget.Adapter}, which retrieves data from an external source (perhaps a list that
|
||
|
the code supplies or query results from the device's database). </p>
|
||
|
<p>The following code sample does the following:</p>
|
||
|
<ol>
|
||
|
<li>Creates a {@link android.widget.Spinner Spinner} with an existing View and binds it to a new ArrayAdapter
|
||
|
that reads an array of colors from the local resources.</li>
|
||
|
<li>Creates another Spinner object from a View and binds it to a new SimpleCursorAdapter that will read
|
||
|
people's names from the device contacts (see {@link android.provider.Contacts.People}).</li>
|
||
|
</ol>
|
||
|
|
||
|
<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 tutorials:
|
||
|
<a href="{@docRoot}resources/tutorials/views/hello-spinner.html">Hello Spinner</a>,
|
||
|
<a href="{@docRoot}resources/tutorials/views/hello-listview.html">Hello ListView</a>, and
|
||
|
<a href="{@docRoot}resources/tutorials/views/hello-gridview.html">Hello GridView</a>.
|
||
|
</div>
|