我设法制作一个ActionBar Tab菜单,调用扩展Fragments的不同类。 问题是,当我改变方向时,在菜单项之间切换什么都不做。 但我终于弄明白了这个问题。
这里的主要问题是当方向发生变化时不会删除旧片段,因此在用户选择的标签上方始终有一个未使用的标签的副本
有什么想法吗?我遗漏了一些基本的东西?
谢谢
答案 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中也有相同的构造函数代码(用于没有支持库的情况)。