oncreateloader initloader getloadermanager example android android-fragments loader android-fragmentactivity android-loadermanager

initloader - loader android example



OnLoadFinished() llamado dos veces (4)

Estoy tratando de averiguar si estoy haciendo algo mal con respecto a los cargadores. Estoy usando la biblioteca de soporte, y tengo un fragmento que en onCreate () llama a initLoader () configurándose como LoaderCallbacks, sin embargo, en una rotación está recibiendo el resultado dos veces en onLoadFinished (), una vez como resultado de la llamada a init (y ya tiene los datos), y una vez como resultado de FragmentActivity recorriendo todos los Cargadores en onStart () y entregando el resultado ya que ya tiene los datos.

Si solo invoco a init una vez (en el primer lanzamiento del Fragmento), no se establece como la devolución de llamada para el Cargador, por lo que no recibe ninguna llamada a onLoadFinished. Parece que solo se debe llamar a onLoadFinished una vez, ya que algunas cosas caras se pueden hacer en onLoadFinished () (como los adaptadores de la lista de compensación, etc.), así que solo estoy tratando de averiguar si esto es un error o si lo soy. simplemente llamando a init en el momento equivocado o algo más.

¿Alguien tiene alguna idea de este problema?


Esta es una pregunta bastante antigua, pero para futuros lectores tengo una solución alternativa. Básicamente, lo que terminé haciendo fue reiniciar el cargador si existía.

public void onActivityCreated(Bundle savedInstanceState) { ... if(getLoaderManager().getLoader(Constants.LOADER_ID) == null) { getLoaderManager().initLoader(Constants.LOADER_ID, null, this); } else { getLoaderManager().restartLoader(Constants.LOADER_ID, null, this); } ... }

Esto resolvió mi problema con el hecho de que en la pantalla girar el cargador se activó dos veces. Una cosa también es que esto es necesario solo para mí en Android <6 que probé. Android 6 parece no tener este problema en absoluto.


Estoy experimentando el mismo problema, yo mismo, sin una buena solución. Parece ser un error en el marco de Android, aquí hay un hilo similar en el que la solución propuesta es colocar initLoader () en onResume (): lo he probado y funciona, en onLoadFinished () se llama solo una vez: Android: LoaderCallbacks.OnLoadFinished llamado dos veces


Tuve un problema similar y la causa fue que tenía initLoader y restartLoader en mi código. Dependiendo de la acción del usuario, mi consulta podría cambiar, así que necesitaba reiniciar mi cargador.

La solución fue utilizar solo restartLoader , incluso en el método de devolución de llamada onResume , reemplace initLoader con restartLoader .


Ver mi publicación en Android: LoaderCallbacks.OnLoadFinished se llama dos veces

Tuve un problema similar al reiniciar Fragmentos en un ViewPager. Mi solución es eliminar el cargador una vez que termine (al final de onLoadFinished) llamando

getLoaderManager().destroyLoader(LOADER_ID);

¡Espero eso ayude!