Я столкнулся с небольшими проблемами при использовании AsyncTaskLoader
и изменении ориентации экрана. Позвольте мне дать вам некоторое представление о том, как устроено мое приложение. :У меня есть очень простое приложение, которое извлекает результаты из URL-адреса и отображает их. Приложение состоит из одного FragmentActivity
и трех Fragments
. Три моих фрагмента выглядят следующим образом::
AsyncTaskLoader
используется для загрузки данных либо от поставщика контента (, если они кэшированы ), либо из сети.
Все работает отлично, пока не изменится ориентация экрана! Я посмотрел на вывод LoaderManager.enableDebugLogging(true)
, и кажется, что источник проблемы в том, что LoaderCallbacks.onLoadFinished
не вызывается в моей деятельности.
Вот кусок кода, запускающий загрузчик:
/* This function is defined in the "first" fragment in an interface and
* implemented in the activity */
@Override
public void onFormSubmission(String word) {
showLoadingFragment();
if ( mWord == null || mWord.equals(word) ) {
getSupportLoaderManager().initLoader(0, word, this);
} else {
getSupportLoaderManager().restartLoader(0, word, this);
}
// Store the word
mWord = word;
}
Код, отображающий результат:
@Override
public void onLoadFinished(Loader<Bundle> loader, Bundle data) {
// Validation and other stuff
ResultFragment fragment = new ResultFragment();
// Add the fragment to the 'result_fragment_container' FrameLayout
getSupportFragmentManager()
.beginTransaction()
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out)
// Replace loading fragment with the result
.replace(R.id.result_fragment_container, fragment)
.commitAllowingStateLoss();
}
Подходы, которые пробовал, но не получилось:
setRetaininstance(true)
фрагментарно.android:configChanges="orientation|keyboardHidden|keyboard"
в манифесте.У меня нет идей, поэтому буду признателен за любую помощь.