Какой вариант вызова диалога вы используете в Android?
Давно мучает один вопрос — какой способ вызова диалога в Android считается лучшим и почему?
SDK предлагает два варианта: showDialog(Dialog dialog) и showDialog(int dialogId [, Bundle bundle]), где второй помечен как deprecated, и рекомендуется пользоваться аналогичным методом фрагментов, но суть осталась та же.
В первом случае я могу создавать сложные диалоги, наполнять их из базы данных, но при повороте экрана они безвозвратно исчезают.
Во втором случае диалог держится молодцом при повороте, но создается единожды за время жизни Activity, поэтому возникают трудности с отображением актуальных данных если диалог нужно поднять больше одного раза и с различными исходными данными.
Что вы думаете по этому поводу? Может, я что-то упустил?
Польность управляемый диалог — можно использовать три кнопки (можно названия разные вешать), вешать свою view, listener'ы на нажатия кнопок и т.д. Создаётся каждый раз заново — динамически.
А для того, чтобы диалог не исчезал — достаточно указать a:configChanges=«orientation» для actvity, где он был вызван.
Все правильно, я тоже использую AlertDialog.Builder (для первого метода). Но вот configChanges=«orientation» сами гугловцы советуют использовать как последнюю возможность, так что я пока его избегаю.
Можно поинтересоваться почему так писать не рекомендуется?
Только что пробежался по guide'у, но ничего вразумительного не нашёл кроме замечания, в котором, кстати, не объясняются причины такого поведения.
Вот removeDialog я как раз и упустил. Но вообще мне не очень нравится при подходе с dialogId, что диалог создается в месте, которое практически не связано с текущим контекстом. Начинаются пляски с созданием Bundle, либо сохранением всего и вся в поля, для того, чтобы использовать при конструировании диалога и т.п. А как DialogFragment решает эти проблемы?
Можно поинтересоваться почему так писать не рекомендуется?
Только что пробежался по guide'у, но ничего вразумительного не нашёл кроме замечания, в котором, кстати, не объясняются причины такого поведения.