2010-01-26 10 views

Respuesta

45

Puede utilizar un ProgressDialog:

ProgressDialog dialog = new ProgressDialog(this); 
dialog.setMessage("Thinking..."); 
dialog.setIndeterminate(true); 
dialog.setCancelable(false); 
dialog.show(); 

El código anterior mostrará el siguiente cuadro de diálogo en la parte superior de su Activity:

alt text

Alternativamente (o adicionalmente) puede mostrar un progreso indicador en la barra de título de su Activity.

alt text

Usted need to request this as a feature cerca de la cima del método onCreate() de su Activity usando el siguiente código:

requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); 

A continuación, encenderlo de esta manera:

setProgressBarIndeterminateVisibility(true); 

y convertirlo así:

setProgressBarIndeterminateVisibility(false); 
+0

El problema es que después de mostrar el cuadro de diálogo me encontré con un tiempo relativamente largo tratamiento que previene la pantalla del cuadro de diálogo que aparece al final de tratamiento cuando ya no lo necesito! – Arutha

+1

Eche un vistazo a 'AsyncTask'. Muestra y oculta el 'ProgressDialog' en' onPreExecute() 'y' onPostExecute' y hace su trabajo en 'doInBackground'. http://android-developers.blogspot.com/2009/05/painless-threading.html –

+0

También valdría la pena leer la Guía para programadores de Android "Diseñar para la receptividad" http://developer.android.com/guide/practices/ design/responsiveness.html –

3

Aquí está un ejemplo simple de hacerlo usando AsyncTask:

public class MyActivity extends Activity { 

    protected void onCreate(Bundle savedInstanceState) { 

     ... 

     new MyLoadTask(this).execute(); //If you have parameters you can pass them inside execute method 

    } 

    private class MyLoadTask extends AsyncTask <Object,Void,String>{   

     private ProgressDialog dialog; 

     public MyLoadTask(MyActivity act) { 
      dialog = new ProgressDialog(act); 
     }  

     protected void onPreExecute() { 
      dialog.setMessage("Loading..."); 
      dialog.show(); 
     }  

     @Override 
     protected String doInBackground(Object... params) {   
      //Perform your task here.... 
      //Return value ... you can return any Object, I used String in this case 

      try { 
       Thread.sleep(6000); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
      return(new String("test")); 
     } 

     @Override 
     protected void onPostExecute(String str) {   
      //Update your UI here.... Get value from doInBackground .... 
      if (dialog.isShowing()) { 
       dialog.dismiss(); 
      }   
     } 
    } 
Cuestiones relacionadas