web-dev-qa-db-fra.com

Comment gérer le bouton Précédent dans la boîte de dialogue?

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?

87
kiran
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;
            }
        });
218
Yasin Hassanien

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
    }
});
107
alexc

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..

19
Never Quit

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;


                        }
                    })
6
NitZRobotKoder

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.

1
Azhar Shaikh

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.

1
Daniel Wilson

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();
0
Andrew Glukhoff