Как стать автором
Обновить

Комментарии 15

У AlertDialog есть куча проблем.
Сейчас все адекватные разработчики перешли именно на DialogFragment, т.к. только при их использовании есть гарантии правильной работы кнопки назад или изменения ориентации девайса и прочих изменений конфигурации.
Зачем начинающих разработчиков учить тому, что вредно?
Я считаю, что надо знать все способы работы. Это можно сравнить как с нашей системой образования в программировании — сначала учат линейному/процедурному, а потом ООП.
Пример про нашу систему образования очень плохой :)
Я считаю, что нужно знать те способы работы, которые использует большинство. И те способы, которые будут нужны в будущем разработчику. Какой смысл учить плохому и говорить «Вот так делать нельзя»?
Чтобы потом когда чужой дядя придет и скажет что так хорошо, он не поверил :)
Словом, не тяните со статьей про фрагменты, как намного более актуальной)
В ближайшие пару дней постараюсь
Слышу звон, да не знаю где он. AlertDialog фуфло, DialogFragment рулез! Король умер, да здравствует король! А то, что «принципиально новый» DialogFragment по сути обертка над Dialog, это уже детали, кто ее вообще читает, эту документацию

This fragment contains a Dialog object, which it displays as appropriate based on the fragment's state.


Не поймте меня неправильно, никто не предлагает использовать только Dialog, но мне действительно интересно как Вы собираетесь использовать DialogFragment, если он на нем основан. Подавать DialogFragment как что-то противоположное, значит не иметь понятия, что он из себя представляет. И да, у AlertDialog такая «куча проблем», что гугл просто из вредтности советует использовать его в документации к DialogFragment, отдельным абзацем, с примерами.
Да не знаю что и сказать. Пару лет назад эта статья может и была бы интересной. Но столько текста про такую простую вещь как алерты в 2013 году — не знаю. Я например не вижу смысла. Это как с переводом официальной документации. Сначала начинаешь читать и думаешь, блин, надо переводить. А через недельку понимаешь что на английском-то читается ни чуть не хуже. Хотя новичкам может и будет интересно.
Я не так давно интересуюсь разработкой под android и у меня вопрос — во всех приведенных в статье примерах используется метод dialog.dismiss() в onClickListener. Во всех своих поделках я этим методом не пользовался, и диалоги отрабатывали нормально. Нужен ли он для AlertDialog? В примерах его нет. Подозреваю, что он нужен для работы с базовым классом Dialog, в котором он определен.
Насколько я помню, dialog.dismiss() или cancel() нужно делать и в AlertDialog, в примерах его нету, потому что показывается событие нажатя кнопки. Откуда известно, когда вы захотите закрыть диалог? Вдруг вы сначала хотите сделать асинхронный вызов а потом уже закрыть. Потому dialog.dismiss() нужно вызывать вручную.
Диалог вы показали, а теперь устройство поверните, что будет?
Правильно leaked window.

Если уже писать про диалог, так хотя бы подробнее, а примеров как вызвать show(); и так очень много.
Если вы уж не хотите использовать DialogFragment, так используйте диалог правильно.
У класса Dialog есть метод setOwnerActivity, который обязательно нужно вызывать после создания. Тогда Activity принимает его как родного и менеджит все его превращения (смена ориентации, кнопка back, разрушение самой Activity).

А вообще диалоги правильно (было) создавать в коллбэке Activity::onCreateDialog куда вы возвращаете сам созданный диалог. Это аналогично вызову setOwnerActivity.

Если уж пишете статью, даже по старому API, внимательно прочитайте документацию по диалогам. Извините, но ставлю вам минут за статью.
У класса Dialog есть метод setOwnerActivity, который обязательно нужно вызывать после создания. Тогда Activity принимает его как родного и менеджит все его превращения (смена ориентации, кнопка back, разрушение самой Activity).

не менеджит.
Зачем dialog.dismiss(); в OnClickListener'ах? AlertDialog закрывается автоматически при нажатии на кнопки (хотя такое поведение можно изменить, но этого как раз в статье и нету). Посмотрите исходный код AlertController.
Соглашусь, что статья мало того, что не актуальная, да еще и не совсем корректная.
В этом примере я использовал setCancelable(true) — это разрешает пользователю закрывать диалоговое окно с помощью хардварной кнопки Back.

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

Здесь есть один подводный камень: обработку элементов этого Layout вы должны будете производить именно в той Activity, где вызываете это диалоговое окно.

Ну это далеко не камень, а очевидность. Да и по хорошему, никто Вам не мешает написать свои интерфейсы для обработки этих событий и передавать в качестве параметров, что есть логическим продолжением вынесения создания диалога в отдельный класс.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории