Android ICS + ActionBar Tabs + 方向变化

5
我成功地创建了一个ActionBar选项卡菜单,调用了不同扩展Fragment的类。 问题在于,当我改变方向时,切换菜单项没有任何反应。但是我最终找到了问题所在。
主要问题在于旧片段在方向改变时没有被移除,因此用户选择的标签上方始终存在一个未使用的标签的副本。
有什么建议吗?我是否遗漏了一些基础知识?
谢谢。
3个回答

15

我最终自己找到了解决方法,在我的自定义ActionBar.TabListener类中定义的onTabSelected方法中,我使用了ft.add将Fragment添加到了我的View。

当屏幕方向改变时,onTabUnselected方法没有被调用,所以Fragment仍然保留在那里。

ft.add替换为ft.replace可以擦除所有旧的Fragment,因此新的Fragment可以正确显示。

希望这可以帮助其他人。


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);
        }   

-1

在选项卡监听器的构造函数中检查旧片段(在未调用onTabUnselected()时留下)并将其分离。这里有一个专门为ActionBarSherlock制作的选项卡监听器:FragmentTabListener.java。同样的构造函数代码(用于不使用支持库的情况)也在API演示的FragmentTabs.java中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接