В своей деятельности я создаю собственный диалог со спиннером и окном редактирования. Проблема, которую я получил, была смена ориентации - я получал исключение каждый раз, поэтому:
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)
ОШИБКА / AndroidRuntime (2928): в
android.view.WindowManagerImpl.removeView (WindowManagerImpl.java:230)
ОШИБКА / AndroidRuntime (2928): в
android.view.Window $ LocalWindowManager.removeView (Window.java:432)
ОШИБКА / AndroidRuntime (2928): в
android.app.Dialog.dismissDialog (Dialog.java:290)
ОШИБКА / AndroidRuntime (2928): в
android.app.Dialog.access $ 000 (Dialog.java:78)
ОШИБКА / AndroidRuntime (2928): в
android.app.Dialog $ 1.run (Dialog.java:123)
ОШИБКА / AndroidRuntime (2928): в
android.app.Dialog.dismiss (Dialog.java:280)
Значит, похоже, что диалог не закрыли вовремя? Может быть, мне следует переопределить метод dismiss () в классе MyDialog и убедиться, что все элементы управления «закрыты»?
Мой класс диалогов создается следующим образом:
mMyDialog = new MyDialog(this);
mMyDialog.show();