Шерлок панели действий не обновляется при изменении ориентации

Я использую панель действий Sherlock в своем приложении. Я использовал функцию «ifRoom|withText» в своем меню. Если я тестирую свой код в портретном режиме, я вижу только значок, а если я поворачиваю ориентацию в альбомную, я все равно вижу только значок. С другой стороны, если я запускаю альбомную ориентацию, я вижу текст и значок в портретной и альбомной ориентации. Это означает, что при повороте экрана панель действий не обновляется. Как я могу исправить?

В меню у меня

    android:showAsAction="ifRoom|withText"

Также я использовал эту строку в своем файле манифеста, чтобы исправить

    android:configChanges="keyboardHidden|orientation|screenSize"

но это не сработало. И я запускаю свой код Android 2.3

Также я использовал фрагмент в своей деятельности,

        FragmentManager fm = getSupportFragmentManager();
    ft = fm.beginTransaction();

    mFragment1 = fm.findFragmentByTag("f1");

    if (mFragment1 == null) {

        mFragment1 = new MenuFragment();
        ft.add(mFragment1, "f1");

    }

    ft.commit();

person SavasCinar    schedule 14.05.2012    source источник


Ответы (2)


Обработка изменений конфигурации не поддерживается ActionBarSherlock.

В версиях до ICS ActionBarSherlock НЕ является частью представления декора, как собственная панель действий, и поэтому на него распространяются те же ограничения, что и на представление содержимого. Обрабатывая изменения конфигурации, вы не позволяете библиотеке адаптироваться к изменениям и, следовательно, будете видеть неправильное отображение или определенные части.

Документация Android также не рекомендует обрабатывать изменения конфигурации. Избегайте их любой ценой, особенно при использовании ActionBarSherlock.

В связи с этим я все еще пытаюсь обойти это для будущих версий библиотеки, но на данный момент рекомендуется избегать.

person Jake Wharton    schedule 14.05.2012
comment
У меня есть некоторый код, который находится в моем методе onDestroy, но я только что добавил ABS, который теперь вызывает onDestroy при повороте. Как вы думаете, мне лучше всего переместить этот код в обработчик кнопки «Назад»? Спасибо - person Matt; 12.07.2012
comment
Вы можете переопределить onDestroy, если не забываете вызывать метод суперкласса. - person Jake Wharton; 13.07.2012
comment
Я забыл упомянуть, что ранее я не уничтожал действия при повороте. Поэтому вместо этого я переместил код в метод onBackPressed. - person Matt; 16.07.2012

Я думаю, вам придется заново создать меню ActionBar при изменении конфигурации.

invalidateOptionsMenu();
person Tony    schedule 14.05.2012
comment
Спасибо за ответ, я попробовал вашу функцию в изменении конфигурации, но это не сработало. У вас есть другая идея? - person SavasCinar; 14.05.2012
comment
Мое единственное другое предложение - попробовать supportInvalidateOptionsMenu(); - person Tony; 14.05.2012
comment
Спасибо, Тони, но все равно это не повлияло. Я не знаю, где проблема - person SavasCinar; 15.05.2012