Я не знаю, сможете ли вы избежать уничтожения экрана, поскольку система должна воссоздать его, чтобы соответствовать измененным размерам экрана.
Но вы могли бы реализовать это после того, как убили экран во время изменения ориентации, и вы сразу же открыли снова (возможно, даже предварительно заполненный данными, которые он содержал ранее).
Как построить этот обходной путь
Вы можете хранить в своей активности некоторую булеву переменную, например 'isDialogActive', которую вы устанавливаете в true, когда диалог открывается, и в значение false, когда диалог закрывается.
Далее вы можете сохранить это логическое значение в Bundle в функции жизненного цикла onSaveInstanceState.
protected void onSaveInstanceState(Bundle bundle) {
super.onSaveInstanceState(bundle);
bundle.putBoolean("is_dialog_active", this.isDialogActive);
}
Так что теперь, когда ваша ориентация меняется, вы можете безопасно узнать, был ли диалог активен до поворота или нет. набор. Этот Пакет переживает изменение ориентации и после изменения передается в onCreate. Теперь мы можем использовать эту информацию (Пакет), когда действие воссоздается в функции жизненного цикла onCreate.
@Override
protected void onCreate(Bundle bundle) {
boolean dialogWasActiveBeforeChange =
bundle.getBoolean("is_dialog_active")
if ( dialogWasActiveBeforeChange){
//use your logic that opens the dialog ( that logic should also set
// this.isDialogActive to true )
}
}