Проблемы при обработке изменений ориентации

Я должен обработать изменения ориентации в своем приложении Android. С этой целью я решил использовать OrientationEventListener класс удобства. Но его методу обратного вызова дают несколько странное поведение.

Мое приложение запускается в режиме портрета и затем в конечном счете переключается на lanscape один. У меня есть некоторый пользовательский код, выполняющийся в обратном вызове onOrientationChanged метод, который обеспечивает некоторую дополнительную логику обработки UI - она имеет несколько вызовов к 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 без любой логики за исключением той, которая имеет дело с ориентацией hadling. Я инициирую переключатель ориентации от эмулятора Android 2.2 путем нажатия Ctrl+F11 What, могло быть неправильным?

Upd: Внутренний класс, который реализует OrientationEventListener

private class OrientationListener extends OrientationEventListener {
    public OrientationL() {
        super(getBaseContext());
    }

    @Override
    public void onOrientationChanged(int orientation) {

        toString();

    }
}

}

5
задан nixau 7 June 2010 в 10:27
поделиться

2 ответа

Это задокументированная ошибка ТОЛЬКО в эмуляторе. Настоящее устройство не будет демонстрировать такое поведение двойных событий жизненного цикла. У меня была такая же проблема некоторое время назад, и она исчезает на реальном устройстве.

Я бы посоветовал проигнорировать проблему, если вы можете, проверяя изменения ориентации только в одном направлении, пока вы не получите в руки физический телефон. В противном случае вы можете «пропустить» второй набор вызовов жизненного цикла, сохранив статическое логическое значение, указывающее, что вы уже прошли первый набор.

См. этот отчет о проблеме для получения дополнительной информации.

5
ответ дан 14 December 2019 в 01:02
поделиться

Вы пробовали использовать onConfigurationChanged?

@Override
public void onConfigurationChanged(Configuration newConfig) {
 if(newConfig.equals(Configuration.ORIENTATION_LANDSCAPE)…
3
ответ дан 14 December 2019 в 01:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: