Dialog.show()与Activity.showDialog()
据我所知,有两种方法来显示一个活动的对话框。
- 创build对话框(例如,使用
AlertDialog.Builder
),然后调用新创build的Dialog的show()
方法。 - 调用Activity的
showDialog()
方法,传递一个int值来唯一地定义你想要build立的对话框types。 然后重写onCreateDialog()
来实际构build对话框,Android会为您显示它。
第二种方法似乎是标准做法,但我很好奇,如果有任何理由,我使用哪一个问题。 以下是我可以想到的:
使用Dialog.show
原因
- 如果您需要以某种方式参数化对话框,则使用
Activity.showDialog
可能会有些尴尬,如本问题所述 。 你可能不得不在一个成员variables中存储一个String或者某个东西,以便在onCreateDialog
或者onPrepareDialog
检索。 - 创build和修改对话框的逻辑分布在很多地方,可能会使代码更难以阅读和维护:
- 你调用
showDialog()
- 在覆盖的
onCreateDialog
方法中,在一个潜在的大的switch
语句中 - 在重载的
onPrepareDialog
方法中,在一个潜在的大的switch
语句中
- 你调用
使用Activity.showDialog
原因:
-
Activity.showDialog
的API文档说,这个对话框是由Activitypipe理的,我认为这个提供了一些好处? 但是,如果您使用AlertDialog.Builder
,我想这也是如此,因为您this
作为parameter passing给Builder的构造函数。 - 如果您的活动将多次显示相同(或非常相似)的对话框,则此选项只会创build一次,而不是每次创build一个新对话框,因此对于为新对象分配空间的压力较小,垃圾收集等
所以我的问题是,决定何时使用Activity.showDialog
以及何时使用Dialog.show
的标准是什么?为什么?
在我看来,你应该更喜欢showDialog
因为这种方法将为你做大部分的工作。 在示例中,您不必担心在更改屏幕方向后您将失去对对话框的引用。 它会自动重新创build。 Dialog.show
更容易出错。
所以我build议你在任何地方都可以使用showDialog
。
我想这个决定取决于你,这取决于你指出的很好的理由。 如果我有一个只有一个对话框的活动(比如说用于显示一个提醒),我只需要触发Dialog.show
方法……另一方面,如果我的应用程序的UI依赖于它的太多function使用对话框,使用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 );
您可以使用API级别8中引入的重载方法showDialog(int, Bundle)
。
简单地将消息显示到捆绑中,这将在onPrepareDialog(int, Dialog, Bundle)
可用。
是的,我知道showDialog()
本身已被弃用。