我成功地创建了一个ActionBar选项卡菜单,调用了不同扩展Fragment的类。
问题在于,当我改变方向时,切换菜单项没有任何反应。但是我最终找到了问题所在。
主要问题在于旧片段在方向改变时没有被移除,因此用户选择的标签上方始终存在一个未使用的标签的副本。
有什么建议吗?我是否遗漏了一些基础知识?
谢谢。
主要问题在于旧片段在方向改变时没有被移除,因此用户选择的标签上方始终存在一个未使用的标签的副本。
有什么建议吗?我是否遗漏了一些基础知识?
谢谢。
我最终自己找到了解决方法,在我的自定义ActionBar.TabListener
类中定义的onTabSelected
方法中,我使用了ft.add
将Fragment添加到了我的View。
当屏幕方向改变时,onTabUnselected
方法没有被调用,所以Fragment仍然保留在那里。
将ft.add
替换为ft.replace
可以擦除所有旧的Fragment,因此新的Fragment可以正确显示。
希望这可以帮助其他人。
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);
}
在选项卡监听器的构造函数中检查旧片段(在未调用onTabUnselected()时留下)并将其分离。这里有一个专门为ActionBarSherlock制作的选项卡监听器:FragmentTabListener.java。同样的构造函数代码(用于不使用支持库的情况)也在API演示的FragmentTabs.java中。