removeDialog(),dismissDialog()和dismiss()之间的区别

时间:2016-03-20 21:52:51

标签: java android

removeDialog()dismiss()dismissDialog()之间有何不同?因为我可以毫无问题地一起使用它们。

实施DialogInterface.OnClickListenerAlertDialog.OnClickListener时是否重要?

我搜索了很多但找不到任何有用的东西。

修改 我正在为Android 2.3开发。

示例代码:

public final class OptionsPreference extends PreferenceActivity implements DialogInterface.OnClickListener
{
private AlertDialog noInternetDialog = null;
//...

    @Override
    protected void onPause()
    {
        if (this.noInternetDialog != null)
        {
            Log.d(LOG_TAG, "Destroying noInternetDialog...");
            this.noInternetDialog.dismiss(); // X?
            removeDialog(DIALOG_NOINTERNET); // X?
            dismissDialog(DIALOG_NOINTERNET); // X?
            this.noInternetDialog = null;
        }
        super.onPause();
    }

    @Override
    protected final Dialog onCreateDialog(final int id)
    {
        switch (id)
        {
            case DIALOG_NOINTERNET:
            {
                final AlertDialog.Builder _builder = new AlertDialog.Builder(this).setIcon(android.R.drawable.ic_dialog_info).setMessage(R.string.str_nointernet);
                _builder.setCancelable(false);
                _builder.setPositiveButton(R.string.str_wifisettings, this);
                _builder.setNeutralButton(R.string.str_ok, this);
                this.noInternetDialog = _builder.create();
                if (!isFinishing())
                {
                    this.noInternetDialog.show();
                }
                return this.noInternetDialog;
            }
// ...
}

1 个答案:

答案 0 :(得分:5)

dismissDialog(int id):取消具有指定ID的对话框。它只隐藏对话框,但仍保留包含此对话框的Activity的内部引用,以便将来可以恢复它。在API 13中保留。

removeDialog(int id):它还会解除具有指定ID的对话框。意味着它隐藏了特定的对话框,并且还清除了活动的所有引用,因此将来无法恢复。在API 13中弃用。

dismiss():此方法在特定对话框上运行,因为它是Dialog类的方法。它也驳回了对话。你必须拥有一个有效的对话框才能解雇它,否则你将获得例外。