Android ICS + вкладки ActionBar + изменение ориентации

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

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

Есть идеи? Я пропустил что-то основное?

Спасибо


person Eloi Navarro    schedule 31.01.2012    source источник


Ответы (3)


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

При изменении ориентации метод onTabUnselected не вызывался, поэтому Фрагмент остался там.

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

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

person Eloi Navarro    schedule 01.02.2012

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

    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);
        }   
person lujop    schedule 19.05.2013

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

person kelleynnn    schedule 22.09.2013