Преимущества DialogFragment перед AlertDialog

При разработке приложения для Android я прочитал, что рекомендуется использовать DialogFragment вместо прямого использования AlertDialog для отображения предупреждений и подтверждений.

Это делается, например, в документации DialogFragment: http://developer.android.com/reference/android/app/DialogFragment.html

Люди также говорят, что предпочитают это здесь: Android DialogFragment vs Dialog

Я хотел бы знать преимущества этого подхода, поскольку код становится более сложным.

Спасибо

Ответ 1

Использовать диалог диалога по диалогу:


  • С момента внедрения уровня API 13:

    showDialog метод из Activity устарел. Вызов диалога в другом месте кода не рекомендуется, так как вам придется самостоятельно управлять диалогом (например, изменение ориентации). Не используя showDialog приведет к случайным исключениям, диалог не связан с какой-либо деятельностью.

    Примечание о showDialog:

    ссылка Dialog: Activities предоставляет возможность управлять созданием, сохранением и восстановлением диалогов. См. OnCreateDialog (int), onPrepareDialog (int, Dialog), showDialog (int) и cancelDialog (int). Если эти методы используются, getOwnerActivity() вернет действие, управляющее этим диалогом.

  • Разница между DialogFragment и AlertDialog

    Одна вещь, которая приходит на ум при чтении вашего вопроса. Разве они так разные? A DialogFragment довольно похож на диалог, он просто завернут внутри фрагмента. Из справки Android относительно DialogFragment:

    A DialogFragment - это фрагмент, который отображает диалоговое окно, плавающее поверх его окно активности. Этот фрагмент содержит объект Dialog, который он отображает в зависимости от состояния фрагмента. Контроль за диалог (выбор, когда показывать, скрывать, отклонять) должен быть выполнен через API здесь, а не с прямыми вызовами в диалоговом окне.

  • Другие примечания

    • Фрагменты - естественная эволюция в структуре Android из-за разнообразия устройств с разными размерами экрана.
    • DialogFragments и Fragments становятся доступными в библиотеке поддержки, что делает класс пригодным для использования во всех существующих версиях Android.

Ответ 2

Это легко. DialogFragment - это фрагмент. Итак, что может предоставить фрагмент, пока другие объекты не могут?
Это обратные вызовы жизненного цикла.
Таким образом, с помощью DialogFragment, он может быть очень мощным и делает ваш код намного чище. Вы когда-нибудь видели утечки окон, если вы не закрыли диалог, когда его активность разрушалась? Итак, чтобы это предотвратить, пытались ли вы когда-нибудь закрыть диалог, когда вызывается onPause()? Чтобы сделать это, вам когда-либо приходилось ссылаться на этот диалог на объект уровня класса?
С помощью DialogFragment все обрабатывается.
И вы получаете все обратные вызовы жизненного цикла.
Затем вы можете обеспечить больше интеллекта в диалоговом окне и заставить его делать некоторые умные работы самостоятельно, а не активность, говоря им, что делать.