Почему 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.