【发布时间】:2012-01-31 17:05:57
【问题描述】:
我设法制作了一个 ActionBar Tab 菜单,调用了扩展 Fragments 的不同类。 问题是,当我改变方向时,在菜单项之间切换什么都不做。 但我终于弄清楚了问题所在。
这里的主要问题是当方向改变时旧片段不会被删除,所以在用户选择的标签上方总是有一个未使用标签的副本
有什么想法吗?我缺少一些基本的东西?
谢谢
【问题讨论】:
标签: android tabs orientation android-actionbar
我设法制作了一个 ActionBar Tab 菜单,调用了扩展 Fragments 的不同类。 问题是,当我改变方向时,在菜单项之间切换什么都不做。 但我终于弄清楚了问题所在。
这里的主要问题是当方向改变时旧片段不会被删除,所以在用户选择的标签上方总是有一个未使用标签的副本
有什么想法吗?我缺少一些基本的东西?
谢谢
【问题讨论】:
标签: android tabs orientation android-actionbar
我终于自己找到了解决方案,在我的自定义ActionBar.TabListener 类中定义的onTabSelected 方法中,我有ft.add 将片段添加到我的视图中。
当方向改变时,onTabUnselected 方法没有被调用,所以 Fragment 仍然存在。
将ft.add 替换为ft.replace 设法擦除所有旧片段,以便正确显示新片段。
希望这对其他人有帮助
【讨论】:
我认为最好将 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);
}
【讨论】:
让选项卡侦听器的构造函数检查旧片段(未调用 onTabUnselected() 左侧)并将其分离。这里有一个专门为 ActionBarSherlock 制作的选项卡监听器:FragmentTabListener.java。 API 演示的 FragmentTabs.java 中也有相同的构造函数代码(用于不使用支持库)。
【讨论】: