Android: диалог и т. Д. Восстанавливаются после изменения ротации - PullRequest
7 голосов
/ 11 сентября 2010

Как восстановить диалог и т.д. после поворота экрана?Например, всплывающее окно alertDialog, чтобы сообщить пользователю некоторую информацию.затем пользователь поворачивает экран в другую ориентацию.Как восстановить alertDialog?Может ли кто-нибудь направить меня к этому?Спасибо!

Добавлен позже:

Я посмотрел исходный код Android и обнаружил следующие вещи:

Диалоги хранятся в mManagedDialogs, и соответствующая информация:

mManagedDialogs = new SparseArray<ManagedDialog>();

onSaveInstanceState связанный:

final void performSaveInstanceState(Bundle outState) {
    onSaveInstanceState(outState);
    saveManagedDialogs(outState);
}

В saveManagedDialogs он имеет отношение к mManagedDialogs.

onRestoreInstanceState связанный:

final void performRestoreInstanceState(Bundle savedInstanceState) {
    onRestoreInstanceState(savedInstanceState);
    restoreManagedDialogs(savedInstanceState);
}

В restoreManagedDialogs это как-то связано с mManagedDialogs.

Как вы видите, для расширенной функции вы должны выполнить сохранение и восстановление работы самостоятельно.Это может быть ночная кобыла, когда у вас есть множество настраиваемых диалогов.Я не пробовал сложное диалоговое окно (имеет вход EdiText, listView, скажем).Таким образом, я хотел бы предупредить пользователей: никогда не поворачивайте экран при вводе вашей информации в диалоговом окне ... ИЛИ динамически блокируйте вращение при отображении диалогового окна.

Спасибо всем, кто мне ответил.Надеюсь, моя информация вам тоже поможет.

Ответы [ 3 ]

5 голосов
/ 11 сентября 2010

Он обрабатывается для вас, пока вы используете Activity # showDialog для его отображения и Activity # onCreateDialog для его создания: http://developer.android.com/reference/android/app/Activity.html#showDialog%28int%29

http://developer.android.com/reference/android/app/Activity.html#onCreateDialog%28int,%20android.os.Bundle%29

0 голосов
/ 19 июня 2013

Добавьте это в тег активности в манифесте

<activity android:label="@string/app_name" android:configChanges="keyboardHidden|orientation|screenSize" android:name=".your.package"/>
0 голосов
/ 11 сентября 2010

Подход, который я выбрал, состоял в том, чтобы не позволить ОС перезапустить вашу деятельность после изменения конфигурации макета. Для этого добавьте эту строку в действия, которые вы хотите запретить перезапускать в файле манифеста:

 <activity
 android:configChanges="orientation|keyboard"
 ...
 >

При желании вы можете обрабатывать изменения конфигурации в коде в случае, если есть некоторые изменения макета, которые вы хотите внести вручную, например, перезагрузка нового представления из XML. Это делается путем перезаписи метода onConfigurationChanged () в вашем классе Activity:

@Override
public void onConfigurationChanged(Configuration newConfig)
{
    //Handle config changes here, paying attention to
    //the newConfig.orientation value
    super.onConfigurationChanged(newConfig);
}

Редактировать: Добавлена ​​"| клавиатура" в список изменений конфигурации

...