12

在具有 4.1.2 的设备上使用 Android时,NoSuchMethodException我得到了一个提示。setOnDismissListenerDialog

相同的代码在版本 4.2.2 的模拟器上运行。

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

有任何想法吗?

4

3 回答 3

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 开始支持所有这些方法。

警报对话框。setOnDismissListener (DialogInterface.OnDismissListener 监听器)

AlerDialog.Builder。创造()

于 2013-06-28T09:24:03.943 回答
6

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

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

于 2013-06-06T19:52:06.517 回答
1

对于在使用 DialogFragment 时寻找此答案的任何人,Mario 的方法将导致 IllegalStateException。在这种情况下,与其建议使用 setOnDismissListener ,不如重写 Fragment 现有的 onDismiss 方法。

于 2015-03-03T16:11:22.143 回答