Intereting Posts
Как использовать bintray jcenter для бесплатной публикации бесплатной библиотеки Android? Он просит меня зарегистрировать организацию и заплатить через месяц Регистрация в режиме единого входа в Facebook и сторонних сайтов за один шаг? Eclipse: один проект PhoneGap для iPhone и Android? Android Studio не может найти мои ресурсы Отправлять уведомления в зависимости от местоположения пользователей. Вкладка «Лидерская доска» не отображается в играх Google Play, а на вкладке «Достижения» Как я могу показать виджет Android App Label / Name ActionBar со значком и текстом в портретном режиме Android Studio adb – устройство USB не найдено – разрешение Verizon Исключение безопасности приоритета потока убедитесь, что apk подписан Установить текст и получить текст из буфера обмена Необходимо скрыть содержание программы с Android «Обзор экрана» DownloadManager.Request.setNotificationVisibility не работает с jSecurityException: недопустимое значение для видимости: 2 TabLayout удаляет ненужную прокрутку Как вызвать функцию Iphone / Android от Javascript?

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

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