Intereting Posts
Используя AsyncTask таким образом: «новый AsyncTask () {« дает мне ошибки TextToSpeech.setEngineByPackageName () возвращает успех, даже если пакет недоступен Как отправить ключевые события в безгласный эмулятор в контрольно-измерительном тесте? Получить объект IntentSender для метода createChooser в Android Файл настроек пользователя vs Файл настроек приложения Как сохранить изображения на Amazon S3 с камеры Android? Остановить прокрутку пользователя, чтобы установить положение на RecyclerView Android: как удалить кнопку «Назад / Дом» в панели действий AssertionError в Gson EnumTypeAdapter при использовании Obfuscation Proguard Увеличить и перетащить изображение в Android Android: DigitalClock удаляет секунды Кто-нибудь использовал Robotium или Calculon для тестирования приложений Android? Как отправить уведомление устройства на устройство с помощью FCM без использования XMPP или любого другого скрипта.? Удалите «Спасибо. Ваш товар появится в ближайшее время. "Тост от появления после покупки InApp Прослушать хроном пользовательский вкладку

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

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

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

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