AlertDialog не закрывается нажатием на фон на устройствах Samsung

Я использую AlertDialog (полное раскрытие: использую React Native, но здесь используется собственный код и мост через API собственных модулей, поэтому я не думаю, что RN вызывает проблему) в приложении, которое я разрабатываю для отображения меню элементов, которое отлично работает во всех случаях. Я разработал его с помощью симулятора Pixel 2 (API 28, Android 9). Однако при тестировании на устройстве Samsung (Galaxy S4, Android 5) диалоговое окно нельзя закрыть, коснувшись фона приложения; Отменить могу только нажатием кнопки назад. Вот код, который я использую:

@ReactMethod
public void showDialog(ReadableArray labelsReadableArray, final Promise promise) {
    final String[] labels = getLabels(labelsReadableArray);
    new AlertDialog.Builder(getCurrentActivity())
        .setItems(labels, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int itemIndex) {
                dialog.dismiss();
                promise.resolve(itemIndex);
            }
        })
        .setOnCancelListener(new DialogInterface.OnCancelListener() {
            @Override
            public void onCancel(DialogInterface dialog) {
                promise.reject("dialog was closed");
            }
        }).setCancelable(true)
        .show();
}

и в коде React Native я вызываю:

NativeModules.AndroidPicker.showDialog(labels)
  .then((index) => /* JS/redux action to process the change)
  .catch(err => console.info(err))

Почему устройство Samsung не отменяет диалоговое окно при нажатии на фон, в то время как другие телефоны Android это делают? Как я могу это исправить?

.setDismissable(true)
ChristopheCVB 07.09.2018 15:49

У меня нет проблем с TouchWiz Oreo с отменяемыми диалогами. Вы пробовали использовать эмулятор на Lollipop, чтобы узнать, не связана ли это с проблемой Samsung?

TheWanderer 07.09.2018 15:50

@TheWanderer да, я запустил Nexus 4 с Lollipop, диалог можно отменить. ChristopheCVB, .setDismissable(true) недоступен и выдает ошибку.

Tom Oakley 07.09.2018 15:52

Это поддержка AlertDialog или AlertDialog фреймворка (содержит ли строка импорта support или нет)?

TheWanderer 07.09.2018 15:53

проверьте есть ли setCanceledOnTouchOutside(true)?

IntelliJ Amiya 07.09.2018 15:54

@TheWanderer Два импорта для AlertDialog - это import android.app.AlertDialog; и import android.content.DialogInterface;, поэтому нет support. Амия, я нашла этот метод раньше, но он недоступен.

Tom Oakley 07.09.2018 15:56

Тогда вам следует попробовать использовать версию поддержки: developer.android.com/reference/android/support/v7/app/…. Возможно, вам потребуется добавить для него зависимость. Я не уверен, использует ли React Gradle или нет.

TheWanderer 07.09.2018 16:00
0
7
247
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать следующее решение, чтобы закрыть AlertDialog, нажав на фон на устройствах Samsung:

AlertDialog alertDialog;
  alertDialog = new AlertDialog.Builder(this).create();
  alertDialog.setCanceledOnTouchOutside(true);

Другие вопросы по теме