В моей деятельности я создаю собственное диалоговое окно с прямоугольником и полем редактирования. Проблема, которую я получил, - это изменение ориентации - каждый раз я получаю исключение, поэтому:
1) Я добавил android:configChanges="orientation|keyboardHidden"
в свою часть активности в манифесте.
2) Реализовано onConfigurationChanged в моей активности, что более менее выглядит следующим образом:
@Override
public void onConfigurationChange(Configuration newConfiguration) {
super.onConfigurationChange(newConfiguration);
if (mMyDialog != null && mMyDialog.isShowing() ) {
mMyDialog.dismiss();
}
В большинстве случаев он работает нормально, но иногда, когда я запускаю свой диалог, активируйте Spinner (запуск Spinners Pop-Up) и измените ориентацию, которую я получил:
ОШИБКА/AndroidRuntime (2928): при android.view.WindowManagerImpl.findViewLocked(WindowManagerImpl.java:385) ERROR/AndroidRuntime (2928): при android.view.WindowManagerImpl.removeView(WindowManagerImpl.java:230) ERROR/AndroidRuntime (2928): при android.view.Window $LocalWindowManager.removeView(Window.java:432) ERROR/AndroidRuntime (2928): при android.app.Dialog.dismissDialog(Dialog.java:290) ERROR/AndroidRuntime (2928): при android.app.Dialog.access $000 (Dialog.java:78) ERROR/AndroidRuntime (2928): при android.app.Dialog $1.run(Dialog.java:123) ERROR/AndroidRuntime (2928): при android.app.Dialog.dismiss(Dialog.java:280)
Итак, похоже, что диалог не уволен вовремя? Может быть, я должен переопределить метод reject() в классе MyDialog и убедиться, что все элементы управления "закрыты"? Мой класс диалога создается следующим образом:
mMyDialog = new MyDialog(this);
mMyDialog.show();
У меня была идея чтобы предотвратить изменения ориентации, когда отображается диалог со счетчиком, но обнаружил, что нет надежного способа для этого. Лучшее решение, которое я нашел, - заменить spinner кнопкой. В моем ответе на самом деле показано, как восстановить меню spinner после изменения ориентации, но вы можете легко не делать этого.
с mMyDialog.hide()
, оно равнозначно.
Я также добавляю, что конструктор this
в MyDialog
- это объект Context
.
Может быть, вы можете попробовать mMyDialog.hide(); функция класса диалога