Je développe une application qui, lorsque vous appuyez sur le bouton, ouvre une boîte de dialogue avec les boutons OK et Annuler.
Ça fonctionne bien.
Lorsque l'utilisateur appuie sur le bouton de retour, je gère ceci comme suit
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if ((keyCode == KeyEvent.KEYCODE_BACK))
{
}
return super.onKeyDown(keyCode, event);
}
Mais la méthode ci-dessus n'est pas appelée. Comment puis-je gérer cela?
dialog.setOnKeyListener(new Dialog.OnKeyListener() {
@Override
public boolean onKey(DialogInterface arg0, int keyCode,
KeyEvent event) {
// TODO Auto-generated method stub
if (keyCode == KeyEvent.KEYCODE_BACK) {
finish();
dialog.dismiss();
}
return true;
}
});
On dirait que vous voulez définir OnCancelListener lorsque vous créez le dialogue. Cela ressemble à ceci:
dialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
//do whatever you want the back key to do
}
});
Vous devez remplacer la méthode OnCancel
. Cette méthode appelle la touche Retour. Voici le code qui fonctionne parfaitement pour moi.
AlertDialog alertDialog;
alertDialog.setOnCancelListener(new OnCancelListener()
{
@Override
public void onCancel(DialogInterface dialog)
{
// TODO Auto-generated method stub
dialog.dismiss();
}
});
J'espère que cela vous aidera et acceptez-le si cela vous aide.
Merci..
Essaye ça
new AlertDialog.Builder(this).setOnKeyListener(new DialogInterface.OnKeyListener() {
@Override
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_BACK){
Logger.d(TAG, "--------- Do Something -----------");
return true;
}
return false;
}
})
c’est parce que, lorsque votre boîte de dialogue s’ouvre, votre fenêtre se déplace ensuite vers Dialog . Vous devez maintenant gérer key
dans votre boîte de dialogue.
Si vous utilisez un DialogFragment, d'après ce que je peux dire la bonne façon de le faire est de remplacer onCancel ()
J'ai remarqué que setOnCancelListener
ne fonctionnait pas, et setOnKeyListener
fonctionnait, mais mon effet secondaire amusant est d'avaler toutes les clés si votre boîte de dialogue contient un texte de montage.
Ce code fonctionne:
Dialog dlg = new Dialog(thisAct, R.style.DialogTheme);
dlg.setContentView(view);
dlg.setCancelable(false);
dlg.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);
dlg.setOnKeyListener((arg0, keyCode, event) -> {
Timber.d("onKey(%d)", keyCode);
//{home intercepting
if ((keyCode == KeyEvent.KEYCODE_HOME)) {
Timber.i("HOME pressed");
return true;
}
return true;
});
dlg.show();