就像标题所说,在安卓中,对话框被取消和被解除有什么区别呢?
通常情况下,当对话框完成任务并从屏幕中移除时,它会被关闭。当用户想要退出对话框并按下“返回”按钮时,对话框会被取消。
例如,您在屏幕上有一个标准的Yes/No对话框。如果用户单击“No”,则对话框会被关闭,并将“No”的值返回给调用者。如果用户没有选择“Yes”或“No”,而是单击“返回”以退出对话框而不进行选择,则对话框将被取消,并且不会向调用者返回任何值。
dismiss
是你必须在代码中明确调用的内容,通常是为了响应对话框中按钮的点击事件。如果您喜欢,在 Activity
中可以调用 dismissDialog
,它将进而调用 dismiss
在 Dialog
上。
cancel
方法仅在代码中明确调用或者当用户在可取消的 Dialog
打开时按下 BACK 按钮时才执行(正如 @Lee 所指出的那样)。
如果使用 DatePicker
,那么所有这些情况仍然适用。就像 @Lee 所说,DatePickerDialog.OnDateSetListener
只是检测用户从 DatePicker
中选择日期的情况。
Android Developer Reference 提供了有关 Dialog
的更多信息。
cancel
方法。对于取消和关闭,有两个不同的监听器。 - creativecreatorormaybenot关闭
调用关闭方法将对话框从屏幕上移除。这个方法可以安全地从任何线程中调用。请注意,当对话框被关闭时,不应该重写此方法进行清理,而是应该在onStop中实现。
取消
调用取消方法将取消对话框。这本质上与调用关闭()相同,但如果已注册,它还会调用您的DialogInterface.OnCancelListener。
隐藏
此方法隐藏对话框,但不会关闭它。
更多详情请点击这里
dialog.cancel()
通常在用户按下返回按钮而不是选择警报对话框提供的选项(如确定/忽略)时被调用,并向调用者返回 null/无值。 而dialog.dismiss()
通常在用户从警报对话框提供的选项中进行选择,例如点击对话框上的关闭按钮,将关闭对话框并向调用者返回相应的非空值。就是这样。举个例子
val dialog = AlertDialog.Builder(this@MainActivity)
.setTitle("Title")
.setMessage("Message")
.setPositiveButton("Dismiss") { dialog, _ ->
dialog.dismiss()
}.setNegativeButton("Cancel") { dialog, _ ->
dialog.cancel()
}.create()
dialog.setOnDismissListener {
Log.i("TAG", "onDismissListener")
}
dialog.setOnCancelListener {
Log.i("TAG", "onCancelListener")
}
dialog.show()
当点击 Dismiss 按钮时
onDismissListener
当点击取消按钮时
onCancelListener
onDismissListener
当系统返回按钮
onCancelListener
onDismissListener