在开发Android应用程序时,我看到建议使用DialogFragment
而不是直接使用AlertDialog
来显示警报和确认框。
例如,在 DialogFragment 的文档中就这样做:http://developer.android.com/reference/android/app/DialogFragment.html
人们也说他们更喜欢这种方法:Android DialogFragment vs Dialog
我想知道这种方法的优点,因为代码会变得更加复杂。
谢谢
在开发Android应用程序时,我看到建议使用DialogFragment
而不是直接使用AlertDialog
来显示警报和确认框。
例如,在 DialogFragment 的文档中就这样做:http://developer.android.com/reference/android/app/DialogFragment.html
人们也说他们更喜欢这种方法:Android DialogFragment vs Dialog
我想知道这种方法的优点,因为代码会变得更加复杂。
谢谢
这很简单。
DialogFragment是一个片段。
那么相对于其他对象,片段能为您提供什么呢?
它是生命周期回调。
因此,使用DialogFragment可以变得非常强大,并使您的代码更加清晰。
如果Activity在销毁时您没有关闭对话框,您是否曾经看到窗口泄漏?为了防止这种情况,您是否曾经尝试在onPause()被调用时关闭对话框?为了做到这一点,您是否曾经不得不将该对话框的引用制作成一个类级别的对象?
通过DialogFragment,这些都处理好了。
并且您获得了所有生命周期回调。
然后,您可以为对话框提供更多智能化功能,使其自己完成一些智能工作,而不是由Activity告诉它该做什么。
自API 13引入以来:
Activity的showDialog方法已过时。在代码的其他位置调用对话框并不明智,因为您将不得不自己管理对话框(例如方向更改)。不使用showDialog会导致偶尔出现异常,因为该对话框与任何Activity都没有关联。
关于showDialog的说明:
Dialog的参考:Activity提供了一种管理对话框创建、保存和恢复的方法。请参见onCreateDialog(int)、onPrepareDialog(int, Dialog)、showDialog(int)和dismissDialog(int)。如果使用了这些方法,则getOwnerActivity()将返回管理此对话框的Activity。
DialogFragment和AlertDialog之间的区别
阅读您的问题时,有一件事情让人想到。它们有很大的不同吗? DialogFragment与Dialog非常相似,只是包装在一个片段中。从Android参考中了解DialogFragment:
DialogFragment是显示在其Activity窗口上方的对话框窗口的片段。此片段包含一个Dialog对象,它根据片段的状态适当地显示。控制对话框(决定何时显示、隐藏、解除)应通过此处的API而不是直接调用对话框来完成。
其他注意事项