połączenia restartLoader
Za każdym razem kiedy chcesz mieć nowe dane lub chcesz zmienić argumenty dla kursora.
Jeśli używasz initLoader
załadować dane
lm = fragment.getLoaderManager();
lm.initLoader(LOADER_ID_LIST, null, this);
Każde wywołanie initLoader
zwróci ten sam kursor onLoadFinished
. Metoda onCreateLoader
zostanie wywołana tylko w pierwszym wywołaniu funkcji initLoader. Dlatego nie można zmienić zapytania. Otrzymasz te same kursor same dane do metody onLoadFinished
.
@Override
public void onLoadFinished(
android.support.v4.content.Loader<Cursor> loader, Cursor cursor) {
switch (loader.getId()) {
case LOADER_ID_LIST:
// The asynchronous load is complete and the data
// load a list of
populateFromCursor(cursor);
break;
case LOADER_ID_ENTRY:
populateFromCursor(cursor);
break;
}
// The listview now displays the queried data.
}
Tak, aby uzyskać nowe dane kursora onLoadFinished
użytku restartLoader
i można przejść w wiązki informacji, jeśli chcesz. Poniżej podajemy wartość null, ponieważ dostępna jest zmienna globalna.
lm = fragment.getLoaderManager();
lm.restartLoader(LOADER_ID_LIST, null, this);
Menedżer ładujący następnie wywoła onCreateLoaderMethod
.
@Override
public android.support.v4.content.Loader<Cursor> onCreateLoader(int id,
Bundle args) {
android.support.v4.content.Loader<Cursor> ret = null;
// Create a new CursorLoader with the following query parameters.
switch (id) {
// load the entire list
case LOADER_ID_LIST:
String sortOrder = null;
switch (mSortOrder) {
case 0:
sortOrder = RidesDatabaseHandler.KEY_DATE_UPDATE + " desc";
break;
case 1:
sortOrder = RidesDatabaseHandler.KEY_ID + " desc";
break;
case 2:
sortOrder = RidesDatabaseHandler.KEY_NAME;
}
return new CursorLoader(context, RidesDatabaseProvider.CONTENT_URI,
PROJECTION, null, null, sortOrder);
// load a single item
case LOADER_ID_ENTRY:
sortOrder = null;
String where = RidesDatabaseHandler.KEY_ID + "=?";
String[] whereArgs = new String[] { Integer.toString(lastshownitem) };
return new CursorLoader(context, RidesDatabaseProvider.CONTENT_URI,
PROJECTION, where, whereArgs, null);
}
return ret;
}
Uwagi: Nie trzeba zadzwonić initLoader
można nazwać restartLoader
za każdym razem to chyba naprawdę chcesz te same dane, który został zwrócony z poprzedniego zapytania. Nie musisz dzwonić pod numer onContentChanged()
, a w docs oznacza to, że Loader.ForceLoadContentObserver
jest zrobione za Ciebie.