2010-09-07 11 views
11

Sarebbe bello se il ProgressBar potesse essere fatto andare via fino a quando non è necessario. C'è un problema nell'usare setVisibility.progressBar in applyMenuChoice? Il problema con l'utilizzo di setVisibility.progressBar in PrintStatusTask(). Execute() è che si blocca l'applicazione durante il runtime.Perché la funzione setVisibility non funziona su Android ProgressBar?

public class Controller extends Activity { 
    private ProgressBar progressBar; 
    ... 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.controller); 
     progressBar = (ProgressBar)findViewById(R.id.progressBar); 
     ... 

    private boolean applyMenuChoice(MenuItem item) { 
     switch (item.getItemId()) { 
     case R.id.menuStatus: 
      progressBar.setVisibility(View.VISIBLE); 
      new PrintStatusTask().execute(); 
      progressBar.setVisibility(View.GONE); 
      ... 

risposta

19
progressBar.setVisibility(View.VISIBLE); 
new PrintStatusTask().execute(); 
progressBar.setVisibility(View.GONE); 

Questo è quello che state facendo: 1. Visualizzare la Progressbar 2. Spawn un'attività su un thread separato 3. Nascondi la Progressbar

L'intero processo sta andando a prendere non più di un paio di millisecondi da eseguire. È necessario nascondere la barra di avanzamento nel metodo onPostExecute() della classe PrintStatusTask.

È necessario comprendere che il metodo execute() di AsyncTask è una chiamata che esegue un altro thread e non attende che termini. Questo è un po 'il punto di AsyncTask.

+0

ottenuto. Grazie. Era così. Avevo anche bisogno di impostare setVisibility (View.VISIBLE) su onPreExecute(). bleh! – jacknad

+0

È progressBar.setVisibility (View.GONE); il modo migliore per rimuovere un progressBar? Spero che l'animazione si fermi in questo caso e non mangi le prestazioni ... – OneWorld

4

Stai cercando di nascondere ProgressBar nello AsyncTask? Se è così, deve essere fatto in onPreExecute o onPostExecute (come tutti i comandi dell'interfaccia utente).

Inoltre, usare qualcosa di simile a questo:

private void toggleProgressBar() { 
    switch (progressBar.getVisibility()) { 
    case View.GONE: 
     progressBar.setVisibility(View.VISIBLE); 
     break; 
    default: 
     progressBar.setVisibility(View.GONE); 
     break; 
    } 
} 
Problemi correlati