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

Я получаю NoSuchMethodException при использовании setOnDismissListener на 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();

Любые идеи?

Ответ 2

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

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. create()

Ответ 3

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