2010-10-08 19 views

risposta

12

Creare un nuovo oggetto di dialogo che estende ProgressDialog, quindi sovrascrivere il metodo public void onBackPressed() al suo interno.

+0

Non il pulsante Annulla, sto parlando del pulsante "Indietro" (uno dei pulsanti fisici) nella parte inferiore del telefono. – michael

+0

Hai provato? Il pulsante Indietro dovrebbe attivare l'evento di annullamento. – AndrewKS

+0

No. Non funziona. Ho impostato un breakpoint in onCancel(), non viene mai chiamato. – michael

6

se non si ha fortuna con il metodo onCancel(), è possibile scrivere un metodo onKeyDown() nella propria attività per verificare se la finestra di avanzamento è visualizzata e se viene premuto il pulsante Indietro ... o puoi sovrascrivere il metodo onBackPressed() (di nuovo, per l'attività) e controllare se la tua finestra di dialogo è visualizzata. in alternativa puoi estendere la classe ProgressDialog e sovrascrivere onBackPressed() direttamente da lì ... nel qual caso non dovrai controllare se la finestra di dialogo è visualizzata.

es. per il metodo di attività:

public void onBackPressed() 
{ 
    if (progressDialog.isShowing()) 
    { 
     // DO SOMETHING 
    } 
} 

l'onKeyDown() metodo sarebbe simile, ma che avrebbe dovuto verificare se la finestra è visibile, se il tasto viene premuto è il tasto 'back', e si dovrebbe anche fare una chiamata a super.onKeyDown() per assicurarsi che venga eseguito anche il metodo predefinito.

public boolean onKeyDown(int keyCode, KeyEvent event) 
{ 
    if (keyCode == KeyEvent.KEYCODE_BACK && progressDialog.isShowing()) 
    { 
     // DO SOMETHING 
    } 

    // Call super code so we dont limit default interaction 
    super.onKeyDown(keyCode, event); 

    return true; 
} 

con entrambi i metodi, la variabile/proprietà progressDialog dovrebbe ovviamente essere in ambito e accessibile.

0

È possibile utilizzare la chiamata statica:

public static ProgressDialog show (Context context, CharSequence title, CharSequence message, boolean indeterminate, boolean cancelable, DialogInterface.OnCancelListener cancelListener) 

Basta essere sicuri di impostare cancelable = true e aggiungere il callback cancelListener appropriata.

Esempio:

progressDialog = ProgressDialog.show(this, "Fetching data...", "Loading ...", true, true, this); 
0
progressbar.setcancellable(false); 

Funziona perfettamente, stavo affrontando lo stesso problema ed ha ottenuto la soluzione.

Problemi correlati