2012-02-11 15 views
7

Ho un'attività che utilizza le schede e le schede commutano i frammenti. Il problema è che il frammento impiega alcuni secondi a caricarsi durante la creazione, quindi le schede di commutazione hanno un ritardo di circa 1 o 2 secondi. Per risolvere questo problema, ho cercato di trovare un modo per visualizzare un semplice grafico di caricamento o anche una finestra di dialogo di avanzamento, in modo che la scheda cambi immediatamente e mostri qualcosa che indica che le cose si stanno caricando fino al completamento.La modifica delle schede è lenta/lenta - Uso dei frammenti

mio metodo del frammento onCreateView assomiglia a questo:

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; 
} 

Ho provato a mettere in doHeavyStuff()onStart(), ma che non ha aiutato nulla. E una discussione non aiuterà perché doHeavyStuff() riguarda la manipolazione di viste/GUI.

Qualche idea su come posso visualizzare il frammento e visualizzare le informazioni di "caricamento" mentre carica tutto il resto?

Grazie!

Matt.

risposta

8

Nella onActivityCreated():

  • Inizia una progress bar (o qualsiasi avanzamento che mostra UI elemento/s).
  • Esegui il HeavyStuffDoingAsyncTask che è spiegato di seguito.

HeavyStuffDoingAsyncTask dovrebbe avere:

  • doHeayStuff() 's logica che non aggiorna ui nel metodo doInBackground.
  • chiamare publishProgress() da doInBackground() ogni volta che si desidera aggiornare l'interfaccia utente.
  • Implementare la logica di aggiornamento dell'interfaccia utente nel metodo onProgressUpdate.
  • Arresta la barra di avanzamento nel metodo onPostExecute.

Buona fortuna.

+0

Sono solo gonfiare vista onCreateView() e che è anche lag. Quindi dovrei cambiare il codice di gonfiaggio come sopra per prestazioni migliori? – Husyn

+0

Stai facendo qualcosa di diverso dal semplice gonfiamento della vista? come popolare le visualizzazioni ecc.,? In tal caso, dovresti fare la parte popula al di fuori di onCreateView() per evitare il laggy. – 500865

+0

No Sto solo gonfiando la vista. return inflater.inflate (R.layout.setting_list_layout, container, false); è l'unica linea in onCreateView(); – Husyn

0

cercano di impostare

pager.setOffscreenPageLimit(no_of_fragments or pages); 
Problemi correlati