Android Fragment – Utilizar el gestor de carga de la actividad en lugar de Fragmento. ¿Está bien?

Dado un fragmento que carga (una gran cantidad) de datos de la base de datos utilizando un cargador.

Problema:

Tengo un adaptador del paginador que destruye el fragmento cuando el usuario se mueve lejos de la pestaña que lo sostiene y lo recrea cuando el usuario vuelve a esa pestaña. Debido a esta recreación, un cargador nuevo se crea cada vez y los datos se carga cada vez.

Pregunta:

Para evitar recrear el cargador cada vez que se crea el fragmento, ¿está bien usar getActivity.getSupportLoaderManager.initLoader(loaderId, null, false) en el método onActivityCreated del fragmento?

Lo he probado, probado y parece estar funcionando bien. Pero no estoy convencido de que sea correcto.

En realidad, revisando el código fuente, terminas haciendo lo mismo.

Fragment.getLoaderManager:

 /** * Return the LoaderManager for this fragment, creating it if needed. */ public LoaderManager getLoaderManager() { if (mLoaderManager != null) { return mLoaderManager; } if (mActivity == null) { throw new IllegalStateException("Fragment " + this + " not attached to Activity"); } mCheckedForLoaderManager = true; mLoaderManager = mActivity.getLoaderManager(mWho, mLoadersStarted, true); return mLoaderManager; } 

mWho es básicamente el ID del fragmento.

 final void setIndex(int index, Fragment parent) { mIndex = index; if (parent != null) { mWho = parent.mWho + ":" + mIndex; } else { mWho = "android:fragment:" + mIndex; } } 

La diferencia en Activity.getLoaderManager() es que quien será (root)

Así que a pesar de que usted puede hacer lo que está pidiendo, llamar directamente desde el fragmento podría ser un mejor enfoque

  • Código fuente de la actividad
  • Código fuente del fragmento

Renuncia: Sólo he comprobado el código fuente en la última versión, pero no espero que sea muy diferente

¿Puedo preguntar por qué simplemente no conservas el Fragmento? Parece que lo que necesitas es crear el Loader en el Fragmento y crear el fragmento con setRetainInstance (true). En este caso, recuerde proporcionar un TAG cuando agregue el fragmento. De esta manera el fragmento sobrevivirá incluso a cambios de configuración de actividad y sólo la vista se recreará dejando su cargador con vida.

  • Dile a Android AsyncTaskLoader que recupere más datos
  • Filtro ListView con CursorLoader y CursorAdapter personalizado
  • Datos fuera de sincronización entre un CursorLoader personalizado y un CursorAdapter respaldando un ListView
  • ¿Cuál es el alcance de un LoaderManager?
  • Matrixcursor con proveedor de contenido no-db
  • Utilizar CursorLoader para consultar la base de datos SQLite y rellenar AutoCompleteTextView
  • IllegalStateException - Apoyo LoaderManager con AutocompleteTextView
  • Android Loader no activa las devoluciones de llamada en la pantalla
  • Referencia de LoaderManager no encontrada con API Nivel 17
  • Cargadores en Android Honeycomb
  • LoaderManager con múltiples cargadores: cómo obtener el cursor correcto
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.