Android ICS + вкладки ActionBar + изменение ориентации - PullRequest
5 голосов
/ 31 января 2012

Мне удалось создать меню вкладки ActionBar, вызывая различные классы, расширяющие фрагменты.Проблема в том, что когда я меняю ориентацию, переключение между пунктами меню ничего не делает.Но я наконец-то понял проблему.

Основная проблема заключается в том, что старый фрагмент не удаляется при изменении ориентации, поэтому всегда есть копия неиспользуемой вкладки чуть выше выбранной пользователем вкладки

Есть идеи?Мне не хватает чего-то простого?

Спасибо

Ответы [ 3 ]

15 голосов
/ 01 февраля 2012

Я наконец нашел решение самостоятельно, в методе onTabSelected, определенном в моем пользовательском ActionBar.TabListener классе, у меня было ft.add, которое добавило фрагмент в мое представление.

Когда ориентация изменилась,метод onTabUnselected не был вызван, поэтому фрагмент остался там.

При замене ft.add на ft.replace удалось стереть все старые фрагменты, чтобы новые были правильно отображены.

Надеюсь, этопомогает кому-то еще

1 голос
/ 19 мая 2013

Я думаю, что лучше сохранить выбранный индекс на активный отдых. Таким образом, у вас не будет проблемы, потому что один и тот же индекс выбран, а невыбранный не нужен, а также приятнее для пользователя.

    protected void onSaveInstanceState(Bundle outState) {   
      super.onSaveInstanceState(outState);
      int i = getActionBar().getSelectedNavigationIndex();
      outState.putInt("selectedTabIndex", i);       
}

    //And then restore
    private void initActionBar(Bundle savedInstanceState) {
        ActionBar ab = getActionBar();
        ab.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
        ab.addTab(...);
            ...

        if(savedInstanceState != null) {
            int index = savedInstanceState.getInt("selectedTabIndex");
            getActionBar().setSelectedNavigationItem(index);
        }   
0 голосов
/ 22 сентября 2013

Пусть конструктор прослушивателя вкладок проверит старый фрагмент (оставленный из onTabUnselected () не вызывается) и отсоединит его. Здесь есть прослушиватель вкладок, созданный специально для ActionBarSherlock: FragmentTabListener.java . Тот же код конструктора (для использования без вспомогательных библиотек) также находится во FragmentTabs.java из демонстраций API.

...