关于android:DialogFragment优于AlertDialog

DialogFragment advantages over AlertDialog

本问题已经有最佳答案,请猛点这里访问。

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

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

人们也说他们更喜欢这个:
Android DialogFragment vs Dialog

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

谢谢


在对话框上使用DialogFragment:

  • 自API级别13引入以来:

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

    关于showDialog的注意事项:

    reference of Dialog: Activities provide a facility to manage the creation, saving and restoring of dialogs. See onCreateDialog(int), onPrepareDialog(int, Dialog), showDialog(int), and dismissDialog(int). If these methods are used, getOwnerActivity() will return the Activity that managed this dialog.

  • DialogFragment和AlertDialog之间的区别

    阅读问题时会想到一件事。他们有这么大的不同吗?
    DialogFragment非常类似于Dialog,它只是包含在一个片段中。从关于DialogFragment的Android参考:

    A DialogFragment is a fragment that displays a dialog window, floating on top of its
    activity's window. This fragment contains a Dialog object, which it
    displays as appropriate based on the fragment's state. Control of the
    dialog (deciding when to show, hide, dismiss it) should be done
    through the API here, not with direct calls on the dialog.

  • 其他说明

    • 由于具有不同屏幕尺寸的设备的多样性,片段是Android框架中的自然演变。
    • DialogFragments和Fragments在支持库中提供,使该类可用于所有当前使用的Android版本。


这很简单。
DialogFragment是一个片段。
那么片段可以提供什么,而其他对象不能?
这是生命周期的回调。
因此,使用DialogFragment,它可以非常强大,使您的代码更清晰。
如果在活动被破坏时没有关闭对话框,你有没有见过窗口泄漏?所以为了防止这种情况,你有没有试过在调用onPause()时关闭对话框?那么为了做到这一点,您是否曾经不得不将该对话框引用到类级别对象?
使用DialogFragment,它都处理完毕。
而且你得到了所有生命周期的回调。
然后,您可以为对话框提供更多智能,并使其自行完成一些智能工作,而不是活动告诉它该做什么。