Диалог.show () vs. Activity.showDialog ()

Насколько я могу судить, есть два способа показать диалог из Activity.

  1. Создайте диалог (например, используя AlertDialog.Builder ), а затем вызовите вновь созданный метод show() Dialog.
  2. Вызвать метод showDialog() Activity, передавая в int, который однозначно определяет, какой тип диалога вы хотите построить. Затем переопределите onCreateDialog() чтобы создать Dialog, и Android отобразит его для вас.

Второй метод, по-видимому, является стандартной практикой, но мне любопытно, есть ли какая-либо причина, какая из них я использую. Вот все, что я могу придумать:

Причины использования Dialog.show

  1. Если вам нужно каким-то образом параметризовать диалог, может быть немного неудобно использовать Activity.showDialog , как описано в этом вопросе . Возможно, вам придется сохранить строку или что-то в переменной-члене, просто чтобы ее можно было найти спустя несколько секунд во время onCreateDialog или onPrepareDialog .
  2. Логика создания и изменения диалогового окна распределяется по нескольким местам, что делает код более трудным для чтения и обслуживания:
    • Место, где вы вызываете showDialog()
    • Внутри потенциально большого оператора switch в переопределенном методе onCreateDialog
    • Внутри потенциально большого оператора switch в переопределенном методе onPrepareDialog

Причины использования Activity.showDialog :

  1. Документы API для Activity.showDialog говорят, что диалог «управляется» действием, которое, я полагаю, дает некоторую выгоду? Но это также верно, если вы используете AlertDialog.Builder , я думаю, потому что вы передаете this как аргумент конструктору Builder.
  2. Если ваша активность будет показывать один и тот же (или очень похожий) Dialog несколько раз, этот параметр создает его только один раз, вместо того, чтобы создавать новый каждый раз, тем самым уменьшая нагрузку на систему, поскольку выделяет пространство для новых объектов , Сбор мусора и т. Д.

Итак, мой вопрос в том, каковы критерии для принятия решения о том, когда использовать Activity.showDialog и когда использовать Dialog.show и почему?

На мой взгляд, вы должны предпочесть showDialog потому что этот метод будет выполнять большую часть работы для вас. В примере Вам не нужно беспокоиться о том, что после изменения ориентации экрана вы потеряете ссылку на свой диалог. Он будет воссоздан автоматически. Dialog.show гораздо более подвержен ошибкам.

Поэтому я предлагаю вам использовать showDialog везде, где сможете.

Я думаю, что решение зависит от вас, в зависимости от ваших веских причин. Если у меня есть активность, которая имеет только один диалог (например, для отображения предупреждения), я просто Dialog.show метод Dialog.show … с другой стороны, если пользовательский интерфейс моего приложения полагается слишком много его функциональности на Использование диалогов было бы гораздо лучше использовать showDialog() . Я думаю, что наилучшим преимуществом использования showDialog() является то, что его легче читать:

 final int ERROR_DIALOG = 404; final int MSG_DIALOG = 200; ..... // if someone else read this, he/she will immediately understand what's going on showDialog( ERROR_DIALOG ); 

Вы можете использовать перегруженный метод showDialog(int, Bundle) введенный в API 8.
Просто запишите сообщение, которое будет показано в комплекте, который будет доступен в onPrepareDialog(int, Dialog, Bundle) .

Да, я знаю, что showDialog() уже устарел.

Intereting Posts
Расширение / сворачивание CardView с помощью жестов нажатия или салфетки (Android)? ListView внутри ScrollView Android.support.v4.app.Fragment.setUserVisibleHint null указатель на возобновление приложения Невозможно воспроизвести звук при нажатии кнопки с помощью playSoundEffect (SoundEffectConstants.CLICK) Я получаю «OutOfMemoryError, брошенное при попытке выбросить OutOfMemoryError; Нет стека »на Android Как сравнить строку с Intent.getStringExtra ()? Размер изображения, возвращаемого Aviary, меньше оригинала Эмулятор не показывает мое приложение MockWebServer и дооснащение с обратным вызовом Последний Harka показывается перед первым персонажем в арабском языке Reshaper на Android Элемент списка становится непривлекательным, если содержит RatingBar? Offline Реляционная база данных для Cross Mobile Platform Фрагмент – InstantationException: нет пустого конструктора -> Google Maps v2? Разбор андроида apk? Галактика s4 и, возможно, все HD-телефоны? Ошибка раздувания памяти