首页 > 代码库 > 对话框AlertDialog的dismiss和cancel区别

对话框AlertDialog的dismiss和cancel区别

先上cancel方法源码和注解

  /**     * Cancel the dialog.  This is essentially the same as calling {@link #dismiss()}, but it will     * also call your {@link DialogInterface.OnCancelListener} (if registered).     */    public void cancel() {        if (!mCanceled && mCancelMessage != null) {            mCanceled = true;            // Obtain a new message so this dialog can be re-used            Message.obtain(mCancelMessage).sendToTarget();        }        dismiss();    }

注解的大意:cancel对话框,这个在本质上基本和disimss一样。但是cancel会执行DialogInterface.OnCancelListener监听,前提是有注册过。

 

public void openDialog(View v){        AlertDialog dialog ;        AlertDialog.Builder builder = new AlertDialog.Builder(this);        builder.setTitle("标题");        builder.setMessage("dismiss和cancel的区别");        builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {                        @Override            public void onClick(DialogInterface dialog, int which) {                dialog.cancel();            }        });                builder.setNegativeButton("取消",new DialogInterface.OnClickListener() {                        @Override            public void onClick(DialogInterface dialog, int which) {                dialog.dismiss();            }        });                dialog = builder.create();        dialog.setOnCancelListener(new DialogInterface.OnCancelListener() {            @Override            public void onCancel(DialogInterface dialog) {                Toast.makeText(MainActivity.this, "setOnCancelListener", Toast.LENGTH_SHORT).show();            }        });        dialog.show();    }

点击确定按钮后会执行DialogInterface.OnCancelListener();弹出Toast且关闭对话框。