105 lines
3.9 KiB
Plaintext
105 lines
3.9 KiB
Plaintext
page.title=Handling the Results
|
|
trainingnavtop=true
|
|
startpage=true
|
|
|
|
@jd:body
|
|
|
|
<!-- This is the training bar -->
|
|
<div id="tb-wrapper">
|
|
<div id="tb">
|
|
<h2>This lesson teaches you to</h2>
|
|
<ol>
|
|
<li>
|
|
<a href="#HandleResults">Handle Query Results</a>
|
|
</li>
|
|
<li>
|
|
<a href="#HandleReset">Clear Out Old Data</a></li>
|
|
</ol>
|
|
</div>
|
|
</div>
|
|
|
|
<p>
|
|
{@link android.support.v4.content.CursorLoader} returns its query results to your
|
|
implementation of
|
|
{@link android.support.v4.app.LoaderManager.LoaderCallbacks#onLoadFinished
|
|
LoaderCallbacks.onLoadFinished()}, in the form of a {@link android.database.Cursor}. In the
|
|
callback, you can update your data display, do further processing on the
|
|
{@link android.database.Cursor} data, and so forth.
|
|
</p>
|
|
<p>
|
|
When the loader framework detects changes to data associated with the query,
|
|
it resets the {@link android.support.v4.content.CursorLoader}, closes the current
|
|
{@link android.database.Cursor}, and then invokes your implementation of
|
|
{@link android.support.v4.app.LoaderManager.LoaderCallbacks#onLoaderReset onLoaderReset()}.
|
|
Use this callback to delete references to the current {@link android.database.Cursor}; when the
|
|
loader framework destroys the {@link android.database.Cursor}, you won't have outstanding
|
|
references that cause memory leaks.
|
|
</p>
|
|
<h2 id="HandleFinished">Handle Query Results</h2>
|
|
<p>
|
|
The following two snippets are an example of displaying the results of a query, using a
|
|
{@link android.widget.ListView} backed by a
|
|
{@link android.support.v4.widget.SimpleCursorAdapter}.
|
|
</p>
|
|
<p>
|
|
The first snippet shows the {@link android.widget.ListView} and
|
|
{@link android.support.v4.widget.SimpleCursorAdapter}:
|
|
</p>
|
|
<pre>
|
|
// Gets a handle to the Android built-in ListView widget
|
|
mListView = ((ListView) findViewById(android.R.id.list));
|
|
// Creates a CursorAdapter
|
|
mAdapter =
|
|
new SimpleCursorAdapter(
|
|
this, // Current context
|
|
R.layout.logitem, // View for each item in the list
|
|
null, // Don't provide the cursor yet
|
|
FROM_COLUMNS, // List of cursor columns to display
|
|
TO_FIELDS, // List of TextViews in each line
|
|
0 // flags
|
|
);
|
|
// Links the adapter to the ListView
|
|
mListView.setAdapter(mAdapter);
|
|
</pre>
|
|
<p>
|
|
The next snippet shows an implementation of
|
|
{@link android.support.v4.app.LoaderManager.LoaderCallbacks#onLoadFinished onLoadFinished()}
|
|
that moves the query results in the returned {@link android.database.Cursor} to the
|
|
{@link android.support.v4.widget.SimpleCursorAdapter}. Changing the
|
|
{@link android.database.Cursor} in the
|
|
{@link android.support.v4.widget.SimpleCursorAdapter} triggers a refresh of the
|
|
{@link android.widget.ListView} with the new data:
|
|
</p>
|
|
<pre>
|
|
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor)
|
|
{
|
|
/*
|
|
* Move the results into the adapter. This
|
|
* triggers the ListView to re-display.
|
|
*/
|
|
mAdapter.swapCursor(cursor);
|
|
}
|
|
</pre>
|
|
<h2 id="HandleReset">Handle a Loader Reset</h2>
|
|
<p>
|
|
The loader framework resets the {@link android.support.v4.content.CursorLoader} whenever the
|
|
{@link android.database.Cursor} becomes invalid. This usually occurs because the data associated
|
|
with the {@link android.database.Cursor} has changed. Before re-running the query,
|
|
the framework calls your implementation of
|
|
{@link android.support.v4.app.LoaderManager.LoaderCallbacks#onLoaderReset onLoaderReset()}. In
|
|
this callback, make sure to prevent memory leaks by deleting all references to the current
|
|
{@link android.database.Cursor}. Once you return from
|
|
{@link android.support.v4.app.LoaderManager.LoaderCallbacks#onLoaderReset onLoaderReset()},
|
|
the loader framework re-runs the query.
|
|
</p>
|
|
<p>
|
|
For example:
|
|
</p>
|
|
<pre>
|
|
public void onLoaderReset(Loader<Cursor> loader)
|
|
{
|
|
// Remove the reference to the current Cursor
|
|
mAdapter.swapCursor(null);
|
|
}
|
|
</pre>
|