2010-09-07 12 views
11

Sería bueno si se pudiera hacer que la ProgressBar desaparezca hasta que se necesite. ¿Hay algún problema al utilizar setVisibility.progressBar en applyMenuChoice? El problema con el uso de setVisibility.progressBar en PrintStatusTask(). Execute() es que bloquea la aplicación durante el tiempo de ejecución.¿Por qué no funciona setVisibility en 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); 
      ... 

Respuesta

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

Esto es lo que está haciendo: 1. Muestran las progressBar 2. freza una tarea en un hilo separado 3. Ocultar la progressBar

Este proceso entero se va a tomar no más de un par de milisegundos para ejecutar. Necesita ocultar la barra de progreso en el método onPostExecute() de la clase PrintStatusTask.

Es necesario comprender que el método de AsyncTaskexecute() es una llamada que se ejecuta otro hilo y no esperar a que termine. Ese es el objetivo de AsyncTask.

+0

que tenemos. Gracias. Eso fue todo. También necesitaba poner setVisibility (View.VISIBLE) en onPreExecute(). bleh! – jacknad

+0

es progressBar.setVisibility (View.GONE); la mejor manera de eliminar un progressBar? Espero que la animación se detenga en este caso y no coma rendimiento ... – OneWorld

4

¿Está tratando de ocultar el ProgressBar en el AsyncTask? Si es así, debe hacerse en onPreExecute o onPostExecute (como todos los comandos de la interfaz de usuario).

También, usar algo como esto:

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