据我所知,有两种方法可以显示来自活动的对话框。
AlertDialog.Builder
),然后调用新创建的Dialog的show()
方法。showDialog()
方法,传入一个唯一定义要构建的Dialog类型的int。然后覆盖onCreateDialog()
以实际构建对话框,Android将为您显示它。第二种方法似乎是标准做法,但我很好奇是否有任何理由对我使用哪种方法很重要。以下是我能想到的所有内容:
使用Dialog.show
Activity.showDialog
可能会有些尴尬,如this question中所述。您可能必须在成员变量中存储String或其他内容,以便稍后在onCreateDialog
或onPrepareDialog
期间检索它。showDialog()
switch
方法onCreateDialog
语句中
switch
方法onPrepareDialog
语句中
使用Activity.showDialog
的原因:
Activity.showDialog
的API文档说对话是由活动“管理”的,我认为它提供了一些好处?但是,如果您使用AlertDialog.Builder
,我也会这样做,因为您将this
作为参数传递给Builder的构造函数。 所以我的问题是,决定何时使用Activity.showDialog
以及何时使用Dialog.show
的标准是什么?为什么?
答案 0 :(得分:18)
在我看来,您应该更喜欢showDialog
,因为这种方法可以为您完成大部分工作。在示例中您不必担心在更改屏幕方向后您将丢失对对话框的引用。它将自动重建。 Dialog.show
更容易出错。
因此,我建议您尽可能使用showDialog
。
答案 1 :(得分:2)
我认为决定取决于你,取决于你指出的好理由。如果我有一个只有一个对话框的活动(例如,用于显示提醒),我只会触发Dialog.show
方法...另一方面,如果我的应用程序的UI依赖于其太多的功能在使用对话框时,使用showDialog()
要好得多。我认为使用showDialog()
的最大好处是它更容易阅读:
final int ERROR_DIALOG = 404;
final int MSG_DIALOG = 200;
.....
// if someone else read this, he/she will immediately understand what's going on
showDialog( ERROR_DIALOG );
答案 2 :(得分:2)
您可以使用API级别8中引入的重载方法showDialog(int, Bundle)
简单地将要显示的消息推送到包中,该消息将在onPrepareDialog(int, Dialog, Bundle)
中提供。
是的,我知道showDialog()
本身已被弃用。