android - Dialog.show() 与 Activity.showDialog()

标签 android dialog

据我所知,有两种方法可以从 Activity 中显示 Dialog。

  1. 创建 Dialog(例如,使用 AlertDialog.Builder),然后调用新创建的 Dialog 的 show() 方法。
  2. 调用 Activity 的 showDialog() 方法,传入一个 int,它唯一地定义了您想要构建的 Dialog 类型。然后重写 onCreateDialog() 以实际构建 Dialog,Android 将为您显示它。

第二种方法似乎是标准做法,但我很好奇我使用哪种方法是否重要。以下是我能想到的:

使用Dialog.show

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

使用Activity.showDialog的原因:

  1. Activity.showDialog 的 API 文档说 Dialog 是由 Activity “管理”的,我想这会带来一些好处吗?但如果你使用 AlertDialog.Builder 也是如此,我认为,因为你将 this 作为参数传递给 Builder 的构造函数。
  2. 如果您的 Activity 将多次显示相同(或非常相似)的 Dialog,则此选项只创建一次,而不是每次都创建一个新的,从而减少系统分配空间的压力用于新对象、垃圾回收等。

所以我的问题是,决定何时使用Activity.showDialog和何时使用Dialog.show的标准是什么,为什么?

最佳答案

在我看来,您应该更喜欢 showDialog,因为这种方法将为您完成大部分工作。例如,您不必担心更改屏幕方向后会丢失对对话框的引用。它将自动重新创建。 Dialog.show 更容易出错。

所以我建议你尽可能使用 showDialog

关于android - Dialog.show() 与 Activity.showDialog(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3170308/

相关文章:

Android:从后台线程引发 AlertDialog

android - 无法在 genymotion 设备上安装我的 Android 应用程序

Android Facebook SDK - 如何查询Facebook好友请求

java - 如何通过计算两个不同的数组数据对数据进行排序。使用集合

android - 在两个声音 “Mediaplayer” android之间滞后

android - EditText.getText Java.lang 空指针异常

jquery - jQuery 对话框中的 Bing map 仅在 IE8/9 中无法正确显示

android无法从对话框中获取文件大小

android - Gradle Sync问题:连接被拒绝:连接

java - 更改 HTML 对话框的样式 (CSS)