Intereting Posts
Android.content.ActivityNotFoundException: активности не найдено для обработки заставки Split Android MediaPlayer – иногда не воспроизводится видео, хотя звуковые композиции Как кодовое разделение между Android и iOS Android AutoCompleteTextView белый на белом Выпадающий список Android Gradle Plugin 1.1.0 – getNdkFolder () больше не найден, любая замена? «Файлы« Gradle »изменились с момента последней синхронизации проекта.» Всегда отображается сообщение Фрагмент против пользовательского вида в Android Извлечь растровое изображение из uri Локальный виджет блокировки блокировки Как снять отметку с отмеченных элементов в режиме навигации? Как сделать кнопку «Edit» «Готово» Android и скрыть клавиатуру при нажатии? Как создать прозрачную активность на Android? Как изменить цвет в круговом индикаторе выполнения? Android: как получить намерение, полученное службой? Проблемы рендеринга @ id / visible Android Studio

Почему Android NoSuchMethodException происходит в AlertDialog.Builder's setOnDismissListener

Я получаю NoSuchMethodException при использовании setOnDismissListener on Dialog в Android на устройстве с 4.1.2.

Этот же код работает над эмулятором с версией 4.2.2.

 new AlertDialog.Builder(this) .setTitle(R.string.select_province) .setOnDismissListener(new OnDismissListener() { public void onDismiss(DialogInterface arg0) { //== other stuff } }).show(); 

Есть идеи?

Solutions Collecting From Web of "Почему Android NoSuchMethodException происходит в AlertDialog.Builder's setOnDismissListener"

Метод setOnDismissListener доступен только из API 17. Ваш эмулятор работает на API 17, ваше устройство не (оно фактически работает на API 16). Здесь перечислены все уровни API.

http://developer.android.com/reference/android/app/AlertDialog.Builder.html#setOnDismissListener(android.content.DialogInterface.OnDismissListener)

Обходной путь к этой проблеме заключается в том, чтобы сначала создать диалоговое окно следующим образом:

 AlertDialog dialog = new AlertDialog.Builder(this).setTitle(R.string.select_province).create(); 

А затем установите прослушиватель непосредственно в диалог:

 dialog.setOnDismissListener( new OnDismissListener() { public void onDismiss(DialogInterface arg0) { //== other stuff } ); 

Затем, если вы также хотите показать это:

 dialog.show(); 

Результат тот же, и все эти методы поддерживаются с API 1.

AlertDialog. SetOnDismissListener (слушатель DialogInterface.OnDismissListener)

AlerDialog.Builder. Создайте()

Для тех, кто ищет этот ответ при использовании DialogFragment, метод Mario приведет к исключению IllegalStateException. В этом случае вместо использования setOnDismissListener, как было предложено, следует переопределить существующий метод onDismiss.