71

在开发 Android 应用程序时,我读到建议使用DialogFragment而不是直接使用 anAlertDialog来显示警报和确认。

例如,这是在 DialogFragment 的文档中完成的:http: //developer.android.com/reference/android/app/DialogFragment.html

人们还说他们更喜欢这里: Android DialogFragment vs Dialog

我想知道这种方法的优点,因为代码变得更加复杂。

谢谢

4

2 回答 2

67

这很简单。
DialogFragment 是一个片段。那么片段可以为您提供什么,而其他对象却不能呢?
这是生命周期回调。
因此使用 DialogFragment,它可以非常强大,并使您的代码更加简洁。
如果您在 Activity 被销毁时没有关闭对话框,您是否见过窗口泄漏?所以为了防止这种情况,你有没有试过在 onPause() 被调用时关闭对话框?因此,要做到这一点,您是否曾经必须将该对话框引用到类级别对象?
使用 DialogFragment,这一切都得到了处理。
你会得到所有的生命周期回调。
然后你可以为对话框提供更多的智能,让它自己做一些聪明的工作,而不是 Activity 告诉它做什么。

于 2016-02-04T23:07:09.500 回答
62

在 Dialog 上使用 DialogFragment:


  • 自 API 级别 13 引入以来

    Activity 中的showDialog方法已弃用。不建议在代码的其他地方调用对话框,因为您必须自己管理对话框(例如方向更改)。不使用 showDialog 会导致偶尔的异常,对话框没有链接到任何 Activity。

    关于 showDialog 的注意事项:

    对话框的引用:活动提供了一种工具来管理对话框的创建、保存和恢复。请参见 onCreateDialog(int)、onPrepareDialog(int, Dialog)、showDialog(int) 和dismissDialog(int)。如果使用这些方法,getOwnerActivity() 将返回管理此对话框的 Activity。

  • DialogFragment 和 AlertDialog 的区别

    阅读您的问题时想到的一件事。他们有那么大的不同吗?DialogFragment与Dialog非常相似,只是包装在一个片段中。来自有关 DialogFragment 的 Android 参考:

    DialogFragment 是一个显示对话窗口的片段,浮动在其活动窗口的顶部。该片段包含一个 Dialog 对象,它会根据片段的状态适当地显示该对象。对话框的控制(决定何时显示、隐藏、关闭它)应该通过这里的 API 来完成,而不是直接调用对话框。

  • 其他注意事项

    • 由于具有不同屏幕尺寸的设备的多样性,片段是 Android 框架中的自然演变。
    • DialogFragments 和 Fragments 在支持库中可用,这使得该类可用于所有当前使用的 Android 版本。
于 2012-12-07T14:49:04.057 回答