Dialog.show()与Activity.showDialog()

时间:2010-07-03 04:18:28

标签: android dialog

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

  1. 创建对话框(例如,使用AlertDialog.Builder),然后调用新创建的Dialog的show()方法。
  2. 调用Activity的showDialog()方法,传入一个唯一定义要构建的Dialog类型的int。然后覆盖onCreateDialog()以实际构建对话框,Android将为您显示它。
  3. 第二种方法似乎是标准做法,但我很好奇是否有任何理由对我使用哪种方法很重要。以下是我能想到的所有内容:

    使用Dialog.show

    的原因
    1. 如果您需要以某种方式参数化对话框,使用Activity.showDialog可能会有些尴尬,如this question中所述。您可能必须在成员变量中存储String或其他内容,以便稍后在onCreateDialogonPrepareDialog期间检索它。
    2. 创建和修改对话框的逻辑分散在很多地方,可能会使代码更难以阅读和维护:
      • 您致电showDialog()
      • 的地方
      • 在重写的switch方法
      • 中的潜在大onCreateDialog语句中
      • 在重写的switch方法
      • 中的潜在大onPrepareDialog语句中
    3. 使用Activity.showDialog的原因:

      1. Activity.showDialog的API文档说对话是由活动“管理”的,我认为它提供了一些好处?但是,如果您使用AlertDialog.Builder,我也会这样做,因为您将this作为参数传递给Builder的构造函数。
      2. 如果您的Activity将多次显示相同(或非常相似)的Dialog,此选项仅创建一次,而不是每次都创建一个新的,从而在分配空间方面给系统带来的压力更小用于新对象,垃圾收集等。
      3. 所以我的问题是,决定何时使用Activity.showDialog以及何时使用Dialog.show的标准是什么?为什么?

3 个答案:

答案 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()本身已被弃用。