Estoy enfrentando un problema al usar AsyncTaskLoader
y la orientación de la pantalla cambia. Déjame darte un contexto sobre cómo está estructurada mi aplicación: tengo una aplicación muy simple que obtiene resultados de una url y la muestra. La aplicación consta de un FragmentActivity
y tres Fragments
. Mis tres fragmentos son los siguientes:No se está llamando al cargador cuando cambia la orientación de la pantalla
- El primer fragmento es un texto de edición y un botón para enviar la entrada.
- El segundo fragmento muestra un spinner de carga
- El tercer fragmento reemplaza el fragmento de carga cuando se obtienen los datos para mostrar los resultados.
El AsyncTaskLoader
se utiliza para cargar datos de un proveedor de contenido (si se trata de caché) o desde la red.
¡Todo funciona bien hasta que cambie la pantalla original! Miré el resultado de LoaderManager.enableDebugLogging(true)
y parece que el origen del problema es que LoaderCallbacks.onLoadFinished
no se llama en mi actividad.
Aquí es una pieza del código que pone en marcha el cargador:
/* 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;
}
El código que muestra el resultado:
@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();
}
enfoques que intentó sin éxito:
- Ajuste
setRetaininstance(true)
en fragmentos. - Configuración
android:configChanges="orientation|keyboardHidden|keyboard"
en el manifiesto.
Me quedo sin ideas, por lo que cualquier ayuda sería apreciada.
Debe evitar confirmar 'FragmentTransaction's inside' onLoadFinished() '... es malo para la experiencia del usuario. Consulte mi [** publicación de blog **] (http://www.androiddesignpatterns.com/2013/08/fragment-transaction-commit-state-loss.html) sobre este tema para obtener más información. –