У меня есть результаты поиска, отображаемые с помощью ViewPager & FragmentStatePageAdapter с каждым набором результатов в собственном фрагменте. Данные загружаются с использованием пользовательского AsyncTaskLoader. Я хочу сохранить позицию прокрутки при переходе на другую деятельность/в фоновый режим и вернуться.Пользовательский загрузчик - onStartLoading(), вызываемый при возврате фрагмента из backstack
Однако, по навигации к другой деятельности, и возвращаясь, загрузчик Менеджеры называет onStartLoading() загрузчика и излишне загружает данные:
protected void onStartLoading() {
if (results.size() > 0) {
Log.d(TAG, "onStartLoading() - deliver result");
deliverResult(mResults);
}
if (takeContentChanged() || results.size() == 0) {
Log.d(TAG, "onStartLoading() - force load");
// Needed for custom loaders
forceLoad();
}
// Register observer...
}
Это также означает, что я не могу восстановить позицию прокрутки (сохранен на сохранении фрагмента). Любой способ избежать этой перезагрузки на onResume фрагмента? Я вызываю initLoader() только в onActivityCreated(), который не вызывается, когда фрагмент восстанавливается из backstack.
Я использую v4 совместимость lib.
Спасибо!
Как вы наполнение ListView? Давайте посмотрим ваши вызовы onLoadFinished() и onLoaderReset() в вашем фрагменте/активности. – kwazi
onLoadFinished() вызывает fillAdapter после проверки ключевого слова поиска, не изменился. Мой onLoaderReset() просто очищает адаптер. – Hari
Просто заметил это тоже ... Очень странно. :/Чтобы предотвратить это с помощью boolean, который проигнорировал результат в onLoadFinished(). – Patrick