Мне нужно обрабатывать изменения ориентации в моем приложении для Android. Для этого я решил использовать OrientationEventListener
класс удобства. Но его метод обратного вызова ведет себя несколько странно.
Мое приложение запускается в портретном режиме, а затем в конечном итоге переключается на пейзажный. У меня есть специальный код, выполняющийся в методе обратного вызова onOrientationChanged
, который предоставляет некоторую дополнительную логику обработки пользовательского интерфейса - у него есть несколько вызовов findViewById
. Странно то, что при переключении обратно из ландшафтного режима в портретный onOrientationChanged
обратный вызов вызывается дважды, и, что еще хуже, второй вызов имеет дело с плохим Context
- метод findViewById
начинает возвращать null
. Эти вызовы выполняются прямо из MainThread
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
listener = new OrientationListener();
}
@Override
protected void onResume() {
super.onResume();
// enabling listening
listener.enable();
}
@Override
protected void onPause() {
super.onPause();
// disabling listening
listener.disable();
}
Я воспроизвел то же поведение с манекеном Activity
без какой-либо логики, кроме той, которая имеет дело с регулировкой ориентации. Я инициирую переключение ориентации из эмулятора Android 2.2 нажатием Ctrl + F11. Что может быть не так?
Upd: Внутренний класс, реализующий OrientationEventListener
private class OrientationListener extends OrientationEventListener {
public OrientationL() {
super(getBaseContext());
}
@Override
public void onOrientationChanged(int orientation) {
toString();
}
}
}