Will Loadermanager.restartloader() Always Result In A Call To Oncreateloader()?
LoaderManager has this method restartLoader(): public abstract Loader restartLoader (int id, Bundle args, LoaderCallbacks callback) Starts a new or restarts an e
Solution 1:
The simple answer to your question is yes, a call to restartLoader() will call onCreateLoader() again.
You can start more than one loader in parallel (say you have two SimpleCursorAdapters to fill), e.g.:
getLoaderManager().initLoader(0, null, this); //id = 0
getLoaderManager().initLoader(1, null, this); //id = 1
onCreateLoader is then called by the Loader Manager for each id (the loader that is returned is then built asynchronously by the Loader Manager):
public Loader<Cursor> onCreateLoader(intid, Bundle args)
{
if (id == 0)
//return a Loader<Cursor> forid0elseif (id == 1)
//return a Loader<Cursor> forid1
}
The Loader Manager passes the resulting loader to onLoadFinished:
publicvoidonLoadFinished(Loader<Cursor> loader, Cursor cursor)
{
if (loader.getId() == 0)
//cursor was returned from onCreateLoader for id 0//perhaps do swapCursor(cursor) on an adapter using this loaderelseif (loader.getId() == 1)
//cursor was returned from onCreateLoader for id 1//perhaps do swapCursor(cursor) on an adapter using this loader
}
When you subsequently call restart loader:
getLoaderManager().restartLoader(0, null, this); //id = 0
...onLoaderReset is first called:
publicvoidonLoaderReset(Loader<Cursor> loader)
{
if (loader.getId() == 0)
//perhaps do swapCursor(null) on an adapter using this loaderelseif (loader.getId() == 1)
//perhaps do swapCursor(null) on an adapter using this loader
}
...followed by a new call to onCreateLoader. So in that respect, onCreateLoader is used both to start a brand new loader and when an existing loader is reset.
Post a Comment for "Will Loadermanager.restartloader() Always Result In A Call To Oncreateloader()?"