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

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

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

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

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

Спасибо


person Raphael Petegrosso    schedule 07.12.2012    source источник
comment
Я не думаю, что думаю, если не требуется конкретное требование, и вы не должны использовать фрагмент диалога, его длинный для написания, у вас есть представление внутри alerttdialog, и вы можете настроить макет в соответствии с вашими требованиями, не нужно вызывать showDialog (), onPrepareDialog () и onCreateDialog .   -  person Abhijit Chakra    schedule 15.07.2013
comment
более надежный код важнее более короткого кода   -  person Tobrun    schedule 17.07.2013


Ответы (2)


Использовать DialogFragment поверх Dialog:


  • # P1 # # P2 # # P3 #
    # P4 #
  • # P5 # # P6 #
    # P7 #
  • Другие примечания

    • Fragments are a natural evolution in the Android framework due to the diversity of devices with different screen sizes.
    • DialogFragments и Fragments доступны в библиотеке поддержки, что делает класс пригодным для использования во всех текущих версиях Android.
person Tobrun    schedule 07.12.2012
comment
Но без showDialog мы также можем отображать диалог, установив представление внутри alertDialog, и я думаю, что это очень просто, и нам нужно меньше кодов и его четкость. - person Abhijit Chakra; 15.07.2013
comment
Как это понять при смене ориентации? - person Tobrun; 16.07.2013
comment
Хорошо, это ваш призыв, просто помните, что использование диалогового окна без showDialog приведет к случайным сообщениям об исключениях в консоли разработчика. (не управляется деятельностью) - person Tobrun; 17.07.2013
comment
Представление IllegalStateException, не прикрепленное к окну, является типичным исключением, вызываемым диалоговым окном. - person Tobrun; 17.07.2013
comment
В любом случае я не думаю, что это снизит производительность моих приложений. - person Abhijit Chakra; 17.07.2013
comment
Я никогда не указывал, что это улучшит производительность. Я хотел указать, что к чему-то должен быть прикреплен диалог. Раньше он прикреплялся к действию с помощью метода showDialog. Но с момента введения фрагментов диалог должен быть прикреплен к фрагменту вместо действия. Не прикрепляя его ни к чему, он подвержен ошибкам - person Tobrun; 17.07.2013
comment
Но мой опыт использования showDialog () в действии бесполезен, и он увеличивает количество строк кода. Например, если я показываю текущее время и дату в поле edittext в диалоговом окне с помощью showDialog (), предположим, что диалоговое окно отображается нажатием кнопки кнопка в первый раз, когда я нажму ее, даст мне текущую дату и время, если я представлю ее во второй раз, она не будет обновлять текущую дату и время, для которых мне нужно обновить в onPrepareDialog (), что вызовет сложность в моем код и увеличивает строки. то, что я говорю для этих случаев, showDialog () абсолютно не требуется. - person Abhijit Chakra; 18.07.2013
comment
ИМО, основная часть ответа, нет никакой разницы / они довольно похожи, на самом деле не отвечает на преимущества заголовка вопроса. - person kizzx2; 23.03.2014
comment
Не согласен с приведенными выше ответами. Использование DialogFragment вызывает сбой приложения при ориентации. При использовании AlertDialog диалоговое окно просто исчезает, и сбоев не происходит. - person Anish Mittal; 18.07.2016
comment
Не знаю, как принят этот ответ. Вопрос: DialogFragment vs AlertDialog, и в этом ответе AlertDialog упоминается только один раз (в подзаголовке, а не фактическая информация). - person Prime624; 15.02.2019

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

person KoreanDude    schedule 04.02.2016