为什么在AlertDialog.Builder的setOnDismissListener中发生Android NoSuchMethodException

viv*_*viv 12 android android-alertdialog

我得到一个NoSuchMethodException当使用setOnDismissListenerDialog一个设备上的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();
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Mar*_*nci 27

解决此问题的方法是首先创建如下对话框:

AlertDialog dialog = new AlertDialog.Builder(this).setTitle(R.string.select_province).create();
Run Code Online (Sandbox Code Playgroud)

然后将侦听器直接设置到对话框:

dialog.setOnDismissListener( new OnDismissListener() {
    public void onDismiss(DialogInterface arg0) {
   //== other stuff
} );
Run Code Online (Sandbox Code Playgroud)

那么如果你还想表现出来:

dialog.show();
Run Code Online (Sandbox Code Playgroud)

结果是相同的,从API 1开始支持所有这些方法.

AlertDialog.setOnDismissListener(DialogInterface.OnDismissListener listener)

AlerDialog.Builder.创建()


Voi*_*icu 6

setOnDismissListener方法仅适用于API 17.您的模拟器在API 17上运行,而您的设备不在(它实际上在API 16上运行).此处枚举所有API级别.

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