标签:
public class SampleActivity extends Activity implements LoaderManager.LoaderCallbacks<D> { public Loader<D> onCreateLoader(int id, Bundle args) { ... } public void onLoadFinished(Loader<D> loader, D data) { ... } public void onLoaderReset(Loader<D> loader) { ... } /* ... */ }
public class SampleListActivity extends ListActivity implements LoaderManager.LoaderCallbacks<Cursor> { private static final String[] PROJECTION = new String[] { "_id", "text_column" }; // The loader‘s unique id. Loader ids are specific to the Activity or // Fragment in which they reside. private static final int LOADER_ID = 1; // The callbacks through which we will interact with the LoaderManager. private LoaderManager.LoaderCallbacks<Cursor> mCallbacks; // The adapter that binds our data to the ListView private SimpleCursorAdapter mAdapter; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); String[] dataColumns = { "text_column" }; int[] viewIDs = { R.id.text_view }; // Initialize the adapter. Note that we pass a ‘null‘ Cursor as the // third argument. We will pass the adapter a Cursor only when the // data has finished loading for the first time (i.e. when the // LoaderManager delivers the data to onLoadFinished). Also note // that we have passed the ‘0‘ flag as the last argument. This // prevents the adapter from registering a ContentObserver for the // Cursor (the CursorLoader will do this for us!). mAdapter = new SimpleCursorAdapter(this, R.layout.list_item, null, dataColumns, viewIDs, 0); // Associate the (now empty) adapter with the ListView. setListAdapter(mAdapter); // The Activity (which implements the LoaderCallbacks<Cursor> // interface) is the callbacks object through which we will interact // with the LoaderManager. The LoaderManager uses this object to // instantiate the Loader and to notify the client when data is made // available/unavailable. mCallbacks = this; // Initialize the Loader with id ‘1‘ and callbacks ‘mCallbacks‘. // If the loader doesn‘t already exist, one is created. Otherwise, // the already created Loader is reused. In either case, the // LoaderManager will manage the Loader across the Activity/Fragment // lifecycle, will receive any new loads once they have completed, // and will report this new data back to the ‘mCallbacks‘ object. LoaderManager lm = getLoaderManager(); lm.initLoader(LOADER_ID, null, mCallbacks); } @Override public Loader<Cursor> onCreateLoader(int id, Bundle args) { // Create a new CursorLoader with the following query parameters. return new CursorLoader(SampleListActivity.this, CONTENT_URI, PROJECTION, null, null, null); } @Override public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) { // A switch-case is useful when dealing with multiple Loaders/IDs switch (loader.getId()) { case LOADER_ID: // The asynchronous load is complete and the data // is now available for use. Only now can we associate // the queried Cursor with the SimpleCursorAdapter. mAdapter.swapCursor(cursor); break; } // The listview now displays the queried data. } @Override public void onLoaderReset(Loader<Cursor> loader) { // For whatever reason, the Loader‘s data is now unavailable. // Remove any references to the old data by replacing it with // a null Cursor. mAdapter.swapCursor(null); } }
LoaderManager使用详解(二)---了解LoaderManager
标签:
原文地址:http://www.cnblogs.com/shiwei-bai/p/4925435.html