Загрузчик не вызывается при изменении ориентации экрана.

Я столкнулся с небольшими проблемами при использовании 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"в манифесте.

У меня нет идей, поэтому буду признателен за любую помощь.

8
задан jcwenger 31 May 2013 в 13:40
поделиться