DialogFragment优于AlertDialog

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

例如,在DialogFragment的文档上完成这个工作: http : //developer.android.com/reference/android/app/DialogFragment.html

人们也说他们更喜欢这里: Android的DialogFragment与对话框

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

谢谢

在Dialog上使用DialogFragment:


  • 自引入API级别13以来

    来自Activity的showDialog方法弃用 。 在代码的其他地方调用一个对话框是不可取的,因为你将不得不自己pipe理对话框(例如方向改变)。 不使用showDialog会导致偶尔的exception,对话框没有链接到任何Activity。

    关于showDialog的注意事项:

    对话框参考:活动提供了一个设施来pipe理对话框的创build,保存和恢复。 请参阅onCreateDialog(int),onPrepareDialog(int,Dialog),showDialog(int)和dismissDialog(int)。 如果使用这些方法,getOwnerActivity()将返回pipe理此对话框的Activity。

  • DialogFragment和AlertDialog之间的区别

    在阅读你的问题时想到一件事。 他们差别很大吗? DialogFragment与Dialog非常相似,只是包装在一个片段中。 从Android参考有关DialogFragment:

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

  • 其他说明

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

这很容易。
DialogFragment是一个片段。 那么一个片段可以提供给你什么,而其他的东西不能?
这是生命周期callback。
因此,使用DialogFragment,它可以非常强大,使您的代码更清洁。
如果在活动被破坏时没有closures对话框,你有没有看到过窗口泄漏? 所以为了防止这种情况,你有没有试图在onPause()被调用时closures对话框? 所以要做到这一点,你有没有把这个对话框引用到一个类对象?
使用DialogFragment,全部处理完毕。
你得到所有的生命周期callback。
然后,你可以提供更多的对话的智慧,使它自己做一些聪明的工作,而不是活动告诉它做什么。