Dialog.show()与Activity.showDialog()

据我所知,有两种方法来显示一个活动的对话框。

  1. 创build对话框(例如,使用AlertDialog.Builder ),然后调用新创build的Dialog的show()方法。
  2. 调用Activity的showDialog()方法,传递一个int值来唯一地定义你想要build立的对话框types。 然后重写onCreateDialog()来实际构build对话框,Android会为您显示它。

第二种方法似乎是标准做法,但我很好奇,如果有任何理由,我使用哪一个问题。 以下是我可以想到的:

使用Dialog.show原因

  1. 如果您需要以某种方式参数化对话框,则使用Activity.showDialog可能会有些尴尬,如本问题所述 。 你可能不得不在一个成员variables中存储一个String或者某个东西,以便在onCreateDialog或者onPrepareDialog检索。
  2. 创build和修改对话框的逻辑分布在很多地方,可能会使代码更难以阅读和维护:
    • 你调用showDialog()
    • 在覆盖的onCreateDialog方法中,在一个潜在的大的switch语句中
    • 在重载的onPrepareDialog方法中,在一个潜在的大的switch语句中

使用Activity.showDialog原因:

  1. Activity.showDialog的API文档说,这个对话框是由Activitypipe理的,我认为这个提供了一些好处? 但是,如果您使用AlertDialog.Builder ,我想这也是如此,因为您this作为parameter passing给Builder的构造函数。
  2. 如果您的活动将多次显示相同(或非常相似)的对话框,则此选项只会创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()本身已被弃用。