Android ICS + ActionBar选项卡+方向更改

时间:2012-01-31 17:05:58

标签: android tabs orientation android-actionbar

我设法制作一个ActionBar Tab菜单,调用扩展Fragments的不同类。 问题是,当我改变方向时,在菜单项之间切换什么都不做。 但我终于弄明白了这个问题。

这里的主要问题是当方向发生变化时不会删除旧片段,因此在用户选择的标签上方始终有一个未使用的标签的副本

有什么想法吗?我遗漏了一些基本的东西?

谢谢

3 个答案:

答案 0 :(得分:15)

我终于在我的自定义onTabSelected类中定义的ActionBar.TabListener方法中找到了解决方案,我将ft.add添加到我的视图中。

当方向改变时,方法onTabUnselected未被调用,因此片段仍然存在。

ft.add替换为ft.replace设法删除所有旧片段,以便正确显示新片段。

希望这有助于其他人

答案 1 :(得分:1)

我认为最好将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);
        }   

答案 2 :(得分:-1)

让标签监听器的构造函数检查旧片段(从未调用onTabUnselected()离开)并将其分离。这里有一个专门为ActionBarSherlock制作的标签监听器:FragmentTabListener.java。 API演示中的FragmentTabs.java中也有相同的构造函数代码(用于没有支持库的情况)。