Мне нужно обрабатывать изменения ориентации в моем приложении Android. Для этого я решил использовать OrientationEventListener
удобный класс. Но его метод обратного вызова имеет несколько странное поведение.
Мое приложение запускается в портретном режиме, а затем в конечном итоге переключается на Lanscape. У меня есть некоторый пользовательский код, выполняемый в методе обратного вызова onOrientationChanged
, который обеспечивает некоторую дополнительную логику обработки пользовательского интерфейса - у него есть несколько вызовов findViewById
.
Странно то, что при переключении из альбомного в портретный режим onOrientationChanged
обратный вызов вызывается дважды, и что еще хуже - второй вызов имеет дело с bad 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();
}
}
}