Как полагают многие здесь,
android:configChanges="keyboardHidden|orientation"
не является решением. Это в лучшем случае взломать. Правильный способ справиться с этим - управлять диалогами с помощью своей деятельности. Вам нужно переопределить несколько методов в коде активности, например:
protected Dialog onCreateDialog(int id) {
// create and return your dialog instance here
AlertDialog dialog = new AlertDialog.Builder(context)
.setTitle(title)
.setIcon(R.drawable.indicator_input_error)
.setMessage(message)
.create();
dialog.setButton(
DialogInterface.BUTTON_POSITIVE,
context.getString(R.string.OK),
(DialogInterface.OnClickListener) null);
return dialog;
}
protected void onPrepareDialog(int id, Dialog dialog) {
// You dialog initialization code here
}
После того, как вы закончите с этим. Вы показываете свой диалог, используя:
showDialog(yourDialogID);
Как только вы закончите реализацию этого, вы увидите, что ваш диалог также будет воссоздан, если произойдут изменения конфигурации. Самое приятное, что ваш Activity
будет управлять вашим диалогом за вас. По возможности он будет использоваться повторно, уменьшая время загрузки диалога, если вы выполняете тяжелую инициализацию.
Примечание из документации по Android SDK:
Следует избегать использования этого атрибута и использовать его только в качестве крайней меры. Пожалуйста, прочитайте Обработка изменений времени выполнения для получения дополнительной информации о том, как правильно обрабатывать перезапуск из-за изменения конфигурации.