2012-04-23 6 views
6

ho un ProgressDialog implementato come questo:Perché la mia ProgressDialog è in ascolto su QUALSIASI TASTO (touch) invece che sul pulsante back per chiudere?

// show progress dialog while date is loading 
     progressDialog = ProgressDialog.show(XYActivity.this, getResources().getString(R.string.progress_dialog_please_wait), getResources().getString(R.string.progress_dialog_loading), true); 
     progressDialog.setOnCancelListener(new DialogInterface.OnCancelListener() { 
      @Override 
      public void onCancel(DialogInterface dialog) { 
       cancel(true); 
       Log.w(LOGTAG, "loading cancelled via back button"); 
      } 

     }); 
     progressDialog.setCancelable(true); 

Questa ProgressDialog è implementato all'interno di un AsyncTask (PreExecute), quindi il metodo cancel (true) arresta l'AsyncTask. Tutto funziona bene.

Il problema è, che posso annullare la ProgressDialog con qualsiasi tocco casuale sul mio schermo. Voglio chiudere la finestra di dialogo solo premendo il tasto Indietro. Mi aiuti per favore! Grazie ragazzi.

risposta

7

questo ha funzionato per me:

@Override 
protected void onPreExecute() { 
    progressDialog = ProgressDialog.show(context, "Title", "Loading...", true, true, new OnCancelListener() { 
     @Override 
     public void onCancel(DialogInterface dialog) { 
      cancel(true); 
     } 
    }); 
    progressDialog.setCanceledOnTouchOutside(false); 
} 

Il setCanceledOnTouchOutside suggerito da GedankenNebel è abbastanza pulito.

1

cercano di sotto di istruzioni

non è sicuro su tutto il pulsante di annullamento ... ho rapporti del metodo onCancel() non sparare correttamente sentito. la mia soluzione consiste semplicemente nel fare un normale pulsante nella finestra di dialogo con una chiamata da restituire ogni volta che si preme il pulsante.

private void createCancelProgressDialog(String title, String message, String buttonText) 
{ 
    cancelDialog = new ProgressDialog(this); 
    cancelDialog.setTitle(title); 
    cancelDialog.setMessage(message); 
    cancelDialog.setButton(buttonText, new DialogInterface.OnClickListener() 
    { 
     public void onClick(DialogInterface dialog, int which) 
     { 
      // Use either finish() or return() to either close the activity or just the dialog 
      cancelDialog.dismiss(); 
     } 
    }); 
    cancelDialog.show(); 
} 

poi basta usare un metodo semplice chiamata da altrove nella vostra attività

createCancelProgressDialog("Loading", "Please wait while activity is loading", "Cancel"); 

piuttosto semplice soluzione, ma lo fa il trucco;) anche solo notare che cancelDialog è un'attività pulire variabile, se non devi chiamarlo da un'altra parte, quindi dovresti essere in grado di farla franca limitando l'ambito della variabile a quel metodo.

+0

grazie, dopo aver aggiunto 'cancelDialog.setCancelable (false);' al codice questo ha funzionato per me, ma ho trovato una soluzione più semplice vedere il mio sotto – GedankenNebel

+15

Ho trovato una soluzione con 'progressDialog.setCanceledOnTouchOutside (false);':))) – GedankenNebel

+1

ok ..! In ogni modo il tuo problema è stato risolto ...! Grazie..! – Dinesh

Problemi correlati