Скрытие диалога со счетчиком - PullRequest
1 голос
/ 08 апреля 2011

В своей деятельности я создаю собственный диалог со спиннером и окном редактирования. Проблема, которую я получил, была смена ориентации - я получал исключение каждый раз, поэтому:

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();

Ответы [ 3 ]

0 голосов
/ 09 апреля 2011

с mMyDialog.hide(), он ведет себя так же.

Я также добавляю, что this в MyDialog конструкторе является Context объектом.

0 голосов
/ 16 августа 2011

У меня была идея предотвратить изменение ориентации , когда отображается диалог со счетчиком, но обнаружил, что нет надежного способа сделать это .Лучшее решение, которое я нашел, - заменить спиннер кнопкой .В моем ответе действительно показано, как восстановить меню счетчика после изменения ориентации, но вы можете легко отказаться от этого.

0 голосов
/ 08 апреля 2011

Может быть, вы можете попробовать mMyDialog.hide ();функция диалогового класса

...