Насколько я могу судить, есть два способа показать диалог из Activity.
- Создайте диалог (например, с помощью
AlertDialog.Builder
), а затем вызовите вновь созданный метод Dialogshow()
. - Вызвать метод Activity
showDialog()
, передавая в int, который однозначно определяет, какой тип диалога вы хотите построить. Затем переопределитеonCreateDialog()
, чтобы создать Dialog, и Android отобразит его для вас.
Второй метод, по-видимому, является стандартной практикой, но мне любопытно, есть ли какая-то причина, какая из них я использую. Здесь все, что я могу придумать:
Причины использования Dialog.show
- Если вам нужно каким-то образом параметризовать диалог, может быть немного неудобно использовать
Activity.showDialog
, как описано в этом вопросе. Возможно, вам придется сохранить строку или что-то в переменной-члене, чтобы ее можно было найти позже в течениеonCreateDialog
илиonPrepareDialog
. - Логика создания и изменения диалогового окна распределяется по нескольким местам, что делает код более трудным для чтения и обслуживания:
- Место, где вы вызываете
showDialog()
- Внутри потенциально большого оператора
switch
в переопределенном методеonCreateDialog
- Внутри потенциально большого выражения
switch
в переопределенном методеonPrepareDialog
- Место, где вы вызываете
Причины использования Activity.showDialog
:
- В документах API для
Activity.showDialog
говорится, что диалог "управляется" с помощью Activity, который, я полагаю, дает некоторую выгоду? Но это также верно, если вы используетеAlertDialog.Builder
, я думаю, потому что вы передаетеthis
в качестве аргумента конструктору Builder. - Если ваша активность будет показывать один и тот же (или очень похожий) диалог несколько раз, этот параметр создает его только один раз, вместо того, чтобы создавать новый каждый раз, тем самым уменьшая нагрузку на систему до выделения пространства для новых объектов, сбора мусора и т.д.
Итак, мой вопрос в том, каковы критерии для принятия решения о том, когда использовать Activity.showDialog
и когда использовать Dialog.show
и почему?