Как обращаться с кнопкой "Назад" в диалоговом окне?
Я разрабатываю приложение, которое при нажатии кнопки открывает диалог с кнопками "ОК" и "Отмена".
Он отлично работает.
Когда пользователь нажимает кнопку "Назад", я обрабатываю это следующим образом
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if ((keyCode == KeyEvent.KEYCODE_BACK))
{
}
return super.onKeyDown(keyCode, event);
}
Но вышеупомянутый метод не вызывается. Как я могу справиться с этим?
Ответы
Ответ 1
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;
}
});
Ответ 2
Похоже, вы хотите установить OnCancelListener при создании диалогового окна. Это выглядит так:
dialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
//do whatever you want the back key to do
}
});
Ответ 3
Вам нужно переопределить метод OnCancel
. Этот метод вызывает нажатие клавиши "Назад". Здесь код, который отлично подходит для меня.
AlertDialog alertDialog;
alertDialog.setOnCancelListener(new OnCancelListener()
{
@Override
public void onCancel(DialogInterface dialog)
{
// TODO Auto-generated method stub
dialog.dismiss();
}
});
Надеюсь, это поможет вам и примет его, если оно вам полезно.
Спасибо..
Ответ 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;
}
})
Ответ 5
это происходит потому, что когда открывается диалоговое окно, ваше окно перемещается в диалоговом окне.
Итак, теперь вы должны обрабатывать key
в диалоговом окне.
Ответ 6
Если вы используете DialogFragment, из того, что я могу сказать , правильный способ сделать это - переопределить onCancel()
Я заметил, что setOnCancelListener
не работает, и setOnKeyListener
работает, но у меня есть забавный побочный эффект, который он глотает все клавиши, если ваш диалог имеет текст редактирования.
Ответ 7
Этот код работает:
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();
Ответ 8
Переопределите метод 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();