[android] 대화 상자에서 뒤로 버튼을 처리하는 방법은 무엇입니까?

버튼을 누르면 확인 및 취소 버튼이있는 대화 상자를 여는 응용 프로그램을 개발 중입니다.

잘 작동합니다.

사용자가 뒤로 버튼을 누르면 다음과 같이 처리합니다.

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

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

그러나 위의 메서드는 호출되지 않습니다. 어떻게 처리 할 수 ​​있습니까?



답변

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


답변

대화 상자를 만들 때 OnCancelListener를 설정하려는 것 같습니다. 다음과 같이 보입니다.

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


답변

OnCancel메서드 를 재정의해야합니다 . 이 메서드는 뒤로 키 누름을 호출합니다. 나에게 완벽하게 작동하는 코드가 있습니다.

 AlertDialog alertDialog;

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

                    dialog.dismiss();

            }
}); 

이것이 당신에게 도움이되기를 바라며, 그것이 당신에게 도움이된다면 그것을 받아들이십시오.

감사..


답변

이 시도

 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;


                        }
                    })


답변

DialogFragment를 사용하는 경우 올바른 방법으로 말할 수 있는 것은 onCancel ()을 재정의하는 것입니다.

내가 발견 setOnCancelListener하지 작업, 그리고 않습니다 setOnKeyListener작동하지만 내가 당신의 대화는 편집 텍스트가있는 경우는 모든 키를 삼킨하는 재미있는 부작용이 위해를.


답변

Dialog가 열리면 창이 Dialog로 이동하기 때문입니다. 이제 key대화 를 처리 해야합니다.


답변

onBackPressed()자신의 대화 상자에서 메서드 를 재정의 하고 코드에서 사용합니다.

public class MyDialog extends Dialog {

    public MyDialog(@NonNull Context context) {
        super(context);
    }

    @Override
    public void onBackPressed() {
        // Do what you want
    }
}

사용하다:

MyDialog dlg = new MyDialog(context);
dlg.show();