Intereting Posts
Android: Фрагменты, SQLite и Loaders Android: Увеличить изображение TextView для Fit XY Обновить контактную информацию в android contact provider Почему я не могу установить currentTime, и продолжительность равна 0 в HTML AudioElement в Android WebView? Открытый API-вызов для получения статуса PNR Android – сохранить значение в LocalStorage до WebView.loadUrl () Получение видеороликов (нелокальных) из приложения Google Фото Очистка данных другого приложения Могу ли я использовать AdMob в приложениях для Android, опубликованных на Amazon Appstore? Зачем уже установлен пользовательский ключ / секретная пара, IllegalStateException в моем приложении Android? Сделать EditText расти по мере его заполнения Когда использовать Android PopupWindow vs Dialog Каков наилучший способ создания уведомления о стиле мультимедиа для Android Lollipop, учитывая обратную совместимость? Файл сборки Android Gradle с функцией Time Stamp работает вчера Ошибка: BinderProxy @ 45d459c0 недействителен; Работает ли ваша деятельность?

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

Я пытаюсь предотвратить закрытие окна 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); Так что нажатие вне диалогового окна не приводит к его закрытию.