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