Dialog.show () против Activity.showDialog () - PullRequest
37 голосов
/ 03 июля 2010

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

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

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

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

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

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

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

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

Ответы [ 3 ]

18 голосов
/ 03 июля 2010

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

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

2 голосов
/ 04 июня 2012

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

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

2 голосов
/ 03 июля 2010

Я думаю, что решение за вами, в зависимости от веских причин, которые вы указали.Если у меня есть действие, в котором есть только один диалог (скажем, для отображения предупреждения), я бы просто запустил метод 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 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...