Dialog.show() vs. Activity.showDialog()(Dialog.show() 与 Activity.showDialog())
问题描述
据我所知,有两种方法可以从 Activity 中显示 Dialog.
As far as I can tell, there are two ways to show a Dialog from an Activity.
- 创建 Dialog(例如,使用
AlertDialog.Builder
),然后调用新创建的 Dialog 的show()
方法. - 调用 Activity 的
showDialog()
方法,传入一个 int,它唯一地定义了您想要构建的 Dialog 类型.然后重写onCreateDialog()
以实际构建 Dialog,Android 将为您显示它.
- Create the Dialog (for example, using an
AlertDialog.Builder
), and then call the newly created Dialog'sshow()
method. - Call the Activity's
showDialog()
method, passing in an int that uniquely defines what sort of Dialog you want to build. Then overrideonCreateDialog()
to actually build the Dialog, and Android will display it for you.
第二种方法似乎是标准做法,但我很好奇我使用哪种方法是否重要.以下是我能想到的:
The second method seems to be the standard practice but I'm curious if there is any reason it matters which one I use. Here's all I can come up with:
使用Dialog.show
- 如果您需要以某种方式参数化 Dialog,使用
Activity.showDialog
可能会有点尴尬,如 这个问题.您可能必须在成员变量中存储字符串或其他内容,以便稍后在onCreateDialog
或onPrepareDialog
期间检索它. - 创建和修改对话框的逻辑分布在多个地方,可能会使代码更难阅读和维护:
- 你调用
showDialog()
的地方 - 在被覆盖的
onCreateDialog
方法中可能很大的switch
语句中 - 在被覆盖的
onPrepareDialog
方法中可能很大的switch
语句中
- 你调用
- If you need to parameterize the Dialog in some way, it can be a little awkward to use
Activity.showDialog
, as described in this question. You may have to store a String or something in a member variable, just so that it can be retrieved moments later duringonCreateDialog
oronPrepareDialog
. - The logic for creating and modifying the dialog is spread out across a number of places, potentially making the code harder to read and maintain:
- The place where you call
showDialog()
- Inside a potentially large
switch
statement in the overriddenonCreateDialog
method - Inside a potentially large
switch
statement in the overriddenonPrepareDialog
method
- The place where you call
使用Activity.showDialog
的原因:
Activity.showDialog
的 API 文档说 Dialog 是由 Activity 管理"的,我想这会带来一些好处吗?但如果你使用AlertDialog.Builder
也是如此,我认为,因为你将this
作为参数传递给 Builder 的构造函数.- 如果您的 Activity 将多次显示相同(或非常相似)的 Dialog,则此选项只创建一次,而不是每次都创建一个新的,从而减少系统分配空间的压力用于新对象、垃圾回收等.
- The API docs for
Activity.showDialog
say that the Dialog is "managed" by the Activity which I suppose provides some benefit? But this is also true if you use theAlertDialog.Builder
, I would think, because you pass inthis
as an argument to the Builder's constructor. - If your Activity is going to show the same (or a very similar) Dialog several times, this option creates it only once, instead of creating a new one each time, thus putting less strain on the system as far as allocating space for new objects, garbage collection, etc.
所以我的问题是,决定何时使用Activity.showDialog
和何时使用Dialog.show
的标准是什么,为什么?
So my question is, what are the criteria for deciding when to use Activity.showDialog
and when to use Dialog.show
, and why?
推荐答案
在我看来你应该更喜欢 showDialog
因为这个方法会为你完成大部分工作.例如,您不必担心更改屏幕方向后会丢失对对话框的引用.它将自动重新创建.Dialog.show
更容易出错.
In my opinion you should prefer showDialog
because this method will do most of the work for you. In example You don't have to worry that you will lose reference to your dialog after changing screen orientation. It will be recreated automatically. Dialog.show
is much more prone to errors.
所以我建议你尽可能使用 showDialog
.
So I suggest you to use showDialog
everywhere you can.
这篇关于Dialog.show() 与 Activity.showDialog()的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Dialog.show() 与 Activity.showDialog()
- MalformedJsonException:在第1行第1列路径中使用JsonReader.setLenient(True)接受格式错误的JSON 2022-01-01
- android 4中的android RadioButton问题 2022-01-01
- Android - 我如何找出用户有多少未读电子邮件? 2022-01-01
- 使用自定义动画时在 iOS9 上忽略 edgesForExtendedLayout 2022-01-01
- 在测试浓缩咖啡时,Android设备不会在屏幕上启动活动 2022-01-01
- Android viewpager检测滑动超出范围 2022-01-01
- 如何检查发送到 Android 应用程序的 Firebase 消息的传递状态? 2022-01-01
- 用 Swift 实现 UITextFieldDelegate 2022-01-01
- Android - 拆分 Drawable 2022-01-01
- 想使用ViewPager,无法识别android.support.*? 2022-01-01