A veces no obtiene la devolución de llamada onCreateLoader después de llamar a initLoader
Tengo una actividad que llama a initLoader cuando se crea para cargar los datos que la actividad mostrará. Normalmente, esto funciona bien. Tengo puntos de interrupción fijados para ver la orden que todo sucede. Primero llamo initLoader, luego obtengo la devolución de llamada OnCreateLoader, luego la devolución de llamada OnLoadFinished, entonces todo es genial.
Sin embargo, me di cuenta de que si cambié la orientación en mi Android que no recibo la devolución de llamada OnCreateLoader o la devolución de llamada OnLoadFinished, lo que resulta en ningún dato se muestra en la página. Todavía obtengo mi punto de interrupción en la llamada de initLoader, así que sé que está sucediendo, pero no obtengo un error y no puedo encontrar ninguna documentación explicando por qué no recibiría una devolución de llamada después de llamar a initLoader.
- ¿Cómo hago girar la versión preliminar de vídeo de la versión de libstreaming?
- El diseño de la vista no se actualiza en el cambio de orientación en android
- Centrar una imagen de fondo en Android
- ¿La orientación de Android como dirección - rollo de tono de corrupción?
- Guardar TextView con onSaveInstanceState
Curiosamente, no obtener los devoluciones de llamada si vuelvo a la orientación original.
Por lo tanto, para resumir:
Empiezo la actividad en orientación vertical
- Llamo initLoader
- Recibo onCreateLoader y las devoluciones de llamada onLoadFinished
Luego cambio al paisaje
- Llamo initLoader
- No onCreateLoader o las devoluciones de llamada onLoadFinished
Vuelvo al retrato
- Llamo initLoader
- Recibo onCreateLoader y las devoluciones de llamada onLoadFinished
Del mismo modo, si inicio la actividad en modo horizontal obtendré las devoluciones de llamada. Entonces, si cambio al retrato, no lo hago. Entonces, si cambio de nuevo al paisaje consigo las devoluciones de llamada otra vez.
¿Alguien tiene alguna idea de lo que está pasando?
- Cambiar el diseño mientras cambia la orientación en tiempo de ejecución en un fragmento sin volver a crear la vista
- Android - SensorManager comportamiento extraño de getOrientation
- ¿Cómo mantener una imagen en una actividad de Android durante un cambio de orientación?
- Obtener el ángulo del dispositivo mediante la función getOrientation ()
- ¿Cómo puedo bloquear el diseño de mi programa Android a una orientación
- ¿Cómo se utilizan los valores de android.graphics.Matrix?
- El video de Android no mantiene la orientación cuando se sube al sitio web.
- La orientación de la pantalla de Android difiere entre los dispositivos
Hemos visto este mismo problema con Fragmentos en un ViewPager. Parece que los cargadores no se activan de nuevo correctamente cuando se reanuda un fragmento. De hecho, cuando el fragmento está pausado, nuestro CursorLoader ya no obtiene las devoluciones de llamada de ContentObserver como yo esperaría.
Nuestra solución ha sido llamar a restartLoader () que descarga el contenido anterior y vuelve a cargar los datos. Esto tendría el mismo efecto neto que destroyLoader (); InitLoader (), pero será más eficiente.
Tendrás que llamar a initLoader en tu onCreate
Para un problema similar y más información echa un vistazo a LoaderCallbacks.onLoadFinished no se llama si ocurre el cambio de orientación durante la ejecución de AsyncTaskLoader
He estado rastreando este problema
Creación inicial (OnActivityCreated)
InitLoader -> OnCreateLoader -> OnOnStartLoading -> OnLoadFinished
Cambio de orientación – OnActivityCreated se llama de nuevo
InitLoader – OnLoadFinished (Sin cargar ningún dato!) – bug.
La única solución que he encontrado es llamar a destroyLoader () justo antes del init. Esto obliga a que se produzca la secuencia adecuada de creación / inicio / finalización.
Lo que parece estar sucediendo es que el código de initLoader está escrito para suponer que el fragmento no se destruye durante un cambio de orientación, lo cual no es, por supuesto, cómo funciona el resto de android.
Tenía algo muy similar sucediendo con los adaptadores del cursor en fragmentos en cambio de la orientación. Initloader se llamó en onCreateView (también probado onStart y onResume), pero onCreatLoader, así como los otros métodos de retorno de llamada de cargador nunca fueron llamados. También de la nota en mi caso el fragmento estaba contenido en un paginador de vista.
Así que inicialmente se creó la actividad y el buscapersonas y los fragmentos y todo funcionó. En el cambio de orientación aunque las listas en mis fragmentos no obtendría datos. Cambiar la orientación de nuevo y los datos regresaron.
En mi caso la solución cambiaba esto:
getActivity().getLoaderManager().initLoader( 0, null, this );
Lo cambié a esto
getLoaderManager().initLoader( 0, null, this );
Esta es una vieja pregunta, pero tal vez alguien podría todavía se preocupa … Tuve el mismo problema y fue capaz de arreglarlo. Aquí está el enlace: onCreateLoader no se llama cuando los cambios de orientación
Pasé semanas en el seguimiento de este problema. Se cansó de poner el contenido fragmento anterior a mi nuevo fragmento. Finalmente fijo.
En mi método onCreate () de que fragmento implementado LoaderManager, hice esto
getLoaderManager().initLoader(0, null, this); if(!getLoaderManager().getLoader(0).isReset()) { getLoaderManager().restartLoader(0, null, this); }
Funciona cuando el cargador nuevo no se activó correctamente.
Tuve este problema recientemente, y me gustaría enviar mi solución.
Me pareció que era simplemente suficiente para hacer:
Loader<Cursor> loader = getActivity().getLoaderManager().getLoader(LOADERID); if (loader == null) { getActivity().getLoaderManager().initLoader(LOADERID, null, this); } else { getActivity().getLoaderManager().restartLoader(LOADERID, null, this); }
- Dos pantallas, mismo tamaño con densidad diferente
- Com.android.support:customtabs: No hay método virtual launchUrl