LoaderManager
имеет этот метод restartLoader()
:
public abstract Loader<D> restartLoader (int id, Bundle args, LoaderCallbacks<D> callback)
Запускает новый или перезапускает существующий загрузчик в этом менеджере, регистрирует обратные вызовы к нему и (если активность/фрагмент в настоящее время запущен) начинает его загружать. Если ранее был запущен загрузчик с тем же идентификатором, он будет автоматически уничтожен, когда новый загрузчик завершит свою работу. Обратный вызов будет доставлен до уничтожения старого загрузчика.
Основываясь на руководстве dev, я понимаю, что вызов onCreateLoader
всегда будет вызван restartLoader()
:
Перезагрузка загрузчика
...
Чтобы отбросить старые данные, вы используете restartLoader(). Например, эта реализация SearchView.OnQueryTextListener перезапускает загрузчик при изменении пользовательского запроса. Загрузчик необходимо перезапустить, чтобы он мог использовать пересмотренный фильтр поиска, чтобы выполнить новый запрос:
public boolean onQueryTextChanged(String newText) {
// Called when the action bar search text has changed. Update
// the search filter, and restart the loader to do a new query
// with this filter.
mCurFilter = !TextUtils.isEmpty(newText) ? newText : null;
getLoaderManager().restartLoader(0, null, this);
return true;
}
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
// NOTE: The Loader is instantiated with the user query
Uri baseUri;
if (mCurFilter != null) {
baseUri = Uri.withAppendedPath(Contacts.CONTENT_FILTER_URI,
Uri.encode(mCurFilter));
} else {
baseUri = Contacts.CONTENT_URI;
}
// Now create and return a CursorLoader that will take care of
// creating a Cursor for the data being displayed.
String select = "((" + Contacts.DISPLAY_NAME + " NOTNULL) AND ("
+ Contacts.HAS_PHONE_NUMBER + "=1) AND ("
+ Contacts.DISPLAY_NAME + " != '' ))";
return new CursorLoader(getActivity(), baseUri,
CONTACTS_SUMMARY_PROJECTION, select, null,
Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC");
}
В этом примере onCreateLoader
- это единственное место, где информация о пользовательском запросе передается загрузчику (при создании экземпляра). Однако документы выкидывают меня, говоря "Начинает новый или перезапускает существующий Loader.