Intereting Posts
InappBilling Ошибка – требуется аутентификация. Вам нужно войти в свою учетную запись google Ошибка при вызове приложения Appregistry.runApplication Задержка видеопотока RTSP Android-клавиатура для клавиатуры закрывает поле edittext Множественные действия / фрагменты и шаблон представления представлений модели Использование VideoView для потокового или прогрессивного скачивания видео (Как) Может ли виртуальное устройство Android использовать интернет локального компьютера? Обновление Android-фильтра Sqlite singleton db не удалось Фон урожая Android Работает ли jFreeChart / дополняет приложение Android 2.x Выход из плагина Fabric Тест инструментария для Android – Как получить новую активность после изменения ориентации? Невозможно создать actionbarsherlock: BuildConfig не может быть разрешен переменной Передача пользовательских атрибутов в настраиваемый шейдер фрагмента Архетип maven для проекта Android

Запретить кнопку «Назад» от закрытия диалогового окна

Я пытаюсь предотвратить закрытие окна AlertDialog при нажатии кнопки «Назад» в Android. Я придерживался обоих популярных методов в этом потоке , и с System.out.println я вижу, что в обоих случаях код выполняется. Однако кнопка «Назад» все еще закрывает диалоговое окно.

Что я могу делать неправильно? В конечном счете, я пытаюсь предотвратить закрытие диалогового окна кнопки «Назад» – это заявление об отказе, которое отображается при первом запуске приложения, и я не хочу, чтобы у пользователя был какой-либо параметр, но нажмите кнопку «Принять» в Чтобы приложение продолжалось.

Solutions Collecting From Web of "Запретить кнопку «Назад» от закрытия диалогового окна"

Просто используйте setCancelable() :

 AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setCancelable(false); 

Это предотвращает закрытие диалогового окна кнопки «Назад», но оставляет «отрицательную» кнопку неповрежденной, если вы решили использовать ее.


Хотя любой пользователь, который не хочет принимать ваши условия обслуживания, может нажать кнопку «домой», в свете комментария Squonk, вот еще два способа предотвратить «отказ от» пользовательского соглашения. Одна из них – простая кнопка «Отказаться», а другая – отменяет кнопку «Назад» в диалоговом окне:

 builder.setNegativeButton("Refuse", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { finish(); } }) .setOnKeyListener(new OnKeyListener() { @Override public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) finish(); return false; } }); 

Чтобы кнопка «Назад» не закрывала диалоговое окно (не зависящее от Activity), просто следующий код:

 alertDialog.setOnKeyListener(new DialogInterface.OnKeyListener() { @Override public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) { // Prevent dialog close on back press button return keyCode == KeyEvent.KEYCODE_BACK; } }); 

Используйте setCancelable(false)

 SampleDialog sampleDialog = SampleDialog.newInstance(); sampleDialog.setCancelable(false); sampleDialog.show(getSupportFragmentManager(), SampleDialog.class.getSimpleName()); 

Только это сработало для меня:

 AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setTitle(title); builder.setMessage(content); /** * Make it when the Back button is pressed, the dialog isn't dismissed. */ builder.setOnKeyListener(new DialogInterface.OnKeyListener() { @Override public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) { Utilities.makeToast(getContext(), "There is no way back!"); return true; // Consumed } else { return false; // Not consumed } } }); Dialog dialog = builder.create(); /** * Make it so touching on the background activity doesn't close the dialog */ dialog.setCanceledOnTouchOutside(false); return dialog; 

Как вы можете видеть, я также добавил dialog.setCanceledOnTouchOutside(false); Так что нажатие вне диалогового окна не приводит к его закрытию.