2012-04-27 3 views
79

Ich entwickle eine Anwendung, die beim Drücken der Taste einen Dialog mit den Schaltflächen OK und Abbrechen öffnet.Wie geht man mit Zurück im Dialog?

Es funktioniert gut.

Wenn der Benutzer die Zurück-Taste drückt, am Umgang ich dies als

public boolean onKeyDown(int keyCode, KeyEvent event) 
{ 
    if ((keyCode == KeyEvent.KEYCODE_BACK)) 
    { 

    } 
return super.onKeyDown(keyCode, event); 
} 

aber die obige Methode nicht aufgerufen folgt. Wie kann ich damit umgehen?

+1

Haben Sie den Benutzer möchten den Dialog in der Lage sein zu kündigen? Oder was macht Ihr onKeyDown-Teil? – Krueger

+0

@kiran :: können Sie etwas klarer sein ?? – KMI

Antwort

187
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; 
      } 
     }); 
+7

es gibt keine Notwendigkeit, den "Dialog" zu schließen; 'finish()' kümmert sich bereits darum. Außerdem sollte diese Methode wahrscheinlich 'false' zurückgeben, um andere Schlüsselereignisse erfassen zu können. – slinden77

+5

Ich denke, dass alexcs Antwort unten eine bessere Alternative ist. –

+0

Probieren Sie beide und wählen Sie, welche bevorzugt wird –

4

dieses

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; 


         } 
        }) 
+0

Mark Antwort, wenn nützlich !!! – NitZRobotKoder

+0

funktioniert nicht für mich .. –

+1

Warum kann ich SetOnCancelListener nicht im Builder verwenden? – ffleandro

1

Versuchen Sie es, weil, wenn Ihr Dialog Fenster öffnet dann seine fokussierter zu Dialog navigieren. So jetzt müssen Sie key auf Ihrem Dialog behandeln.

+0

Obwohl richtig, ist diese Antwort nicht sehr informativ darüber, wie mit 'Schlüssel' im Dialog umzugehen ist. –

19

Sie müssen die Methode OnCancel überschreiben. Diese Methode ruft die Zurück-Taste auf. Hier ist Code, der perfekt zu mir funktioniert.

AlertDialog alertDialog; 

    alertDialog.setOnCancelListener(new OnCancelListener() 
    {     
      @Override 
      public void onCancel(DialogInterface dialog) 
      { 
       // TODO Auto-generated method stub 

        dialog.dismiss();       

      } 
}); 

Hoffe, das wird Ihnen helfen, und es akzeptieren, wenn es für Sie hilfreich ist.

Dank ..

89

Klingt wie Sie die OnCancelListener festlegen möchten, wenn Sie den Dialog erstellen. Es sieht wie folgt aus:

dialog.setOnCancelListener(new DialogInterface.OnCancelListener() {   
    @Override 
    public void onCancel(DialogInterface dialog) { 
     //do whatever you want the back key to do 
    } 
}); 
+6

Dies ist definitiv die beste Antwort. Schön und einfach. Keine Notwendigkeit, das KeyEvent zu erkennen. Perfekt. – LargeGlasses

+2

Ich weiß, ich bin zu spät, aber dachte, um etwas zu zeigen. Dies wird zusätzlich ausgelöst, wenn der Benutzer irgendwo außerhalb des Dialogs klickt. Wenn Sie also nur die Option zum Zurückdrücken überschreiben möchten, ist dies nicht das, wonach Sie suchen. – user2520215

+3

@ user2520215 Wenn Sie nicht möchten, dass es ausgelöst wird, wenn der Benutzer außerhalb des Dialogfelds klickt, sollten Sie dialog.setCanceledOnTouchOutside (false) festlegen. Dies ist definitiv die bessere Antwort. –