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

时间:2013-06-06 19:45:38

标签: android android-alertdialog

在使用4.1.2的设备上在Android上的NoSuchMethodException上使用setOnDismissListener时,我得到Dialog

相同的代码正在使用版本4.2.2的模拟器。

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

有什么想法吗?

3 个答案:

答案 0 :(得分:27)

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

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 listener)

AlerDialog.Builder。create()

答案 1 :(得分:6)

setOnDismissListener方法仅在API 17中可用。您的模拟器在API 17上运行,而您的设备不在(它实际上在API 16上运行)。枚举所有API级别here

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

答案 2 :(得分:1)

对于在使用DialogFragment时寻找此答案的任何人,Mario的方法将导致IllegalStateException。在这种情况下,不应该按照建议使用setOnDismissListener,而应该覆盖Fragment现有的onDismiss方法。