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.
Non il pulsante Annulla, sto parlando del pulsante "Indietro" (uno dei pulsanti fisici) nella parte inferiore del telefono. – michael
Hai provato? Il pulsante Indietro dovrebbe attivare l'evento di annullamento. – AndrewKS
No. Non funziona. Ho impostato un breakpoint in onCancel(), non viene mai chiamato. – michael