web-dev-qa-db-ja.com

ダイアログで戻るボタンを処理する方法は?

ボタンを押すと、[OK]ボタンと[キャンセル]ボタンのあるダイアログを開くアプリケーションを開発しています。

正常に動作します。

ユーザーが戻るボタンを押すと、私はこれを次のように処理しています

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

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

ただし、上記のメソッドは呼び出されません。これをどのように処理できますか?

89
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;
            }
        });
224
Yasin Hassanien

ダイアログを作成するときにOnCancelListenerを設定したいようです。次のようになります。

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

OnCancelメソッドをオーバーライドする必要があります。このメソッドは、Backキーを押すと呼び出されます。これが私にぴったりのコードです。

 AlertDialog alertDialog;

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

                    dialog.dismiss();                           

            }
}); 

これがあなたの助けになることを望み、それがあなたに役立つならそれを受け入れてください。

ありがとう。

19
Never Quit

これを試して

 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

これは、ダイアログが開くと、ウィンドウがダイアログに移動するためです。そのため、ダイアログでkeyを処理する必要があります。

1
Azhar Shaikh

DialogFragmentを使用している場合、私が伝えることができることから それを行う正しい方法はonCancel() をオーバーライドすることです

setOnCancelListenerは機能せず、setOnKeyListenerは機能しますが、ダイアログに編集テキストがある場合、すべてのキーを飲み込むという面白い副作用があります。

1
Daniel Wilson

このコードは機能します:

    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