Skip to content Skip to sidebar Skip to footer

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()?"