2010-01-26 6 views
21

Come è possibile visualizzare a livello di programmazione una clessidra in un'applicazione Android?clessidra Android

risposta

45

È possibile utilizzare un ProgressDialog:

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

Il codice di cui sopra mostrerà il seguente dialogo sulla parte superiore del Activity:

alt text

In alternativa (o in aggiunta) è possibile visualizzare un Progress indicatore nella barra del titolo del tuo Activity.

alt text

È need to request this as a feature vicino alla parte superiore del metodo onCreate() del vostro Activity utilizzando il seguente codice:

requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); 

poi accenderlo in questo modo:

setProgressBarIndeterminateVisibility(true); 

e trasformarlo fuori in questo modo:

setProgressBarIndeterminateVisibility(false); 
+0

Il problema è che dopo la visualizzazione della finestra di dialogo sono andato un relativamente lungo trattamento che impedisce la visualizzazione della finestra di dialogo che appare alla fine del trattamento quando non ho più bisogno! – Arutha

+1

Dai un'occhiata a 'AsyncTask'. Visualizzate e nascondete 'ProgressDialog' in' onPreExecute() 'e' onPostExecute' e svolgete il vostro lavoro in 'doInBackground'. http://android-developers.blogspot.com/2009/05/painless-threading.html –

+0

Potrebbe anche valere la pena di leggere la Guida per gli sviluppatori Android "Designing For Responsiveness" http://developer.android.com/guide/practices/ design/responsiveness.html –

3

Ecco un semplice esempio di farlo 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(); 
      }   
     } 
    } 
Problemi correlati