2012-04-27 11 views
79

ボタンを押したときに、OKボタンとCancelボタンを含むダイアログが開きます。ダイアログで戻るボタンを処理する方法は?

正常に動作します。

ユーザーが戻るボタンを押すと

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

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

に従いますが、上記のメソッドが呼び出されていないとして、私はこれを処理しています。これをどうすれば処理できますか?

+1

は、ユーザーがダイアログをキャンセルできるようにしたいですか?また、onKeyDownの部分は何ですか? – Krueger

+0

@kiran ::もう少しクリアなことができますか? – KMI

答えて

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

'Dialog'を却下する必要はありません。 'finish()'はこれをすでに処理しています。また、このメソッドは、他の場所でキーイベントを捕捉できるように 'false'を返すべきです。 – slinden77

+5

私は以下の回答がより良い選択肢だと考えています。 –

+0

両方を試してどちらが好きかを選択してください –

4

は、あなたのダイアログボックスが開いたら、あなたのウィンドウはダイアログへの集中をナビゲートするので、それがあるこの

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

回答をマークする、便利な場合は! – NitZRobotKoder

+0

私のために働いていません.. –

+1

なぜビルダーでsetOnCancelListenerを使用できませんか? – ffleandro

1

を試してみてください。 これでダイアログにkeyを処理する必要があります。

+0

正しいのですが、この回答はDialogで 'key'を処理する方法についてはあまり有益ではありません。 –

19

OnCancelメソッドをオーバーライドする必要があります。このメソッドは、Back Keyキーを押します。ここに私にとって完璧に動作するコードがあります。

AlertDialog alertDialog; 

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

        dialog.dismiss();       

      } 
}); 

ご希望の場合はお手数ですが、お手数ではございます。あなたがダイアログを作成するときにOnCancelListenerを設定するように

おかげ..

89

が鳴ります。それは次のようになります。

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

これは間違いなく最高の答えです。ニースとシンプル。 KeyEventを検出する必要はありません。完璧。 – LargeGlasses

+2

私は遅すぎると知っていますが、何かを指摘すると考えました。これはさらに、ユーザがダイアログの外の場所をクリックするとトリガされます。あなたがバックプレスオプションをオーバーライドするだけでよい場合、これはあなたが探しているものではありません。 – user2520215

+3

@ user2520215ユーザーがダイアログの外でクリックしたときにトリガーしないようにするには、dialog.setCanceledOnTouchOutside(false)を設定する必要があります。これは間違いなく良い答えです。 –

関連する問題