2012-02-11 12 views
7

Tengo una Actividad que usa pestañas, y las pestañas cambian Fragmentos. El problema es que el Fragmento tarda unos segundos en cargarse cuando se está creando, por lo que al cambiar de pestaña tiene un retraso de aproximadamente 1 o 2 segundos. Para solucionarlo, he estado tratando de encontrar una forma de mostrar un simple gráfico de carga o incluso un diálogo de progreso, de modo que la pestaña cambie instantáneamente y muestre algo que indique que las cosas se están cargando hasta que todo se complete.Cambiar Pestañas es Lento/Laggy - Usar Fragmentos

Mi método del fragmento onCreateView se ve así:

FrameLayout fl; 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    fl = (FrameLayout) inflater.inflate(R.layout.text_layout, container, false); 

    doHeavyStuff(); 

    return fl; 
} 

He intentado poner en doHeavyStuff()onStart(), pero eso no ayuda nada. Y un subproceso no ayudará porque doHeavyStuff() implica manipular vistas/GUI.

Alguna idea sobre cómo puedo mostrar el Fragmento y mostrar la información "Cargando" mientras que todo lo demás carga?

Gracias!

Matt.

Respuesta

8

En el onActivityCreated():

  • Iniciar un progress bar (o cualquier elemento de progreso que muestra la interfaz de usuario/s).
  • Ejecute el HeavyStuffDoingAsyncTask que se explica a continuación.

HeavyStuffDoingAsyncTask debe tener:

  • doHeayStuff() 's lógica que no actualiza la interfaz de usuario en el método doInBackground.
  • llame al publishProgress() desde doInBackground() cada vez que desee actualizar la interfaz de usuario.
  • Implemente la lógica de actualización de la interfaz de usuario en el método onProgressUpdate.
  • Detenga la barra de progreso en el método onPostExecute.

Buena suerte.

+0

sólo estoy inflando vista en onCreateView() y eso también es lag. Entonces, ¿debería cambiar ese código de inflación como el anterior para un mejor rendimiento? – Husyn

+0

¿Estás haciendo algo más que simplemente inflar la vista? como poblar las vistas, etc.,? Si es así, debe hacer la parte de relleno fuera de onCreateView() para evitar el comportamiento lag. – 500865

+0

No, solo estoy inflando la vista. return inflater.inflate (R.layout.setting_list_layout, contenedor, falso); es la única línea en onCreateView(); – Husyn

0

intenta establecer

pager.setOffscreenPageLimit(no_of_fragments or pages); 
Cuestiones relacionadas