Проблема в том, что когда на экране есть Диалог , который на самом деле является совершенно отдельным Мероприятием, помощники диалога просто скрывают его от вас. Есть только 2 способа решить эту проблему (в зависимости от того, что вы пытаетесь сделать).
Вы можете расширить тип используемого вами диалога и переопределить onKeyPress внутри вашего производного класса, а затем использовать его вместо системного диалога по умолчанию.
public class MyDialog extends ProgressDialog {
/* ... */
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
// handle the keypress
return true;
}
return false;
}
}
Вы можете запустить диалоги с опцией отмены, а затем поймать действие отмены ... что-то вроде:
public class MyActivity implements OnCancelListener {
/* ... */
public void startDialog() {
ProgressDialog pd = ProgressDialog.show(
MyActivity.this, // Context
"Progress Title", // title for dialog
"Progress Message", // message for dialog
true, // indeterminate?
true, // cancellable?
this // onCancelListener()
);
}
@Override
public void onCancel(DialogInterface dialog) {
// the user canceled out of the load dialog (hit the 'back' button)... do something here
}
}