我有一个使用ViewPager + ActionBar Sherlock标签的屏幕。我在pager上设置了setOnPageChangeListener
,它会执行以下操作:
@Override
public void onPageSelected(final int position) {
actionBar.setSelectedNavigationItem(position);
}
这在纵向模式下运作良好,即使在横向模式下也是如此,只要我只有几个选项卡且所有选项卡都被显示。但是,如果我在横向模式下添加了更多选项卡,它们将折叠成单个下拉组件。当我通过ViewPager翻页时,会执行setSelectedNavigationItem
方法,但现在它对下拉列表选择没有影响:它保留在最后一个选定的值。这真的很糟糕,因为用户缺少视觉提示:选项卡可能会显示“一”,但用户已经在第6页。
是否有一种基于位置编程地更改要显示的选项卡的方法?
P.S. 我知道为什么会发生这种情况: 这是来自com.android.internal.app.ActionBarImpl的代码:
public void setSelectedNavigationItem(int position) {
switch (mActionView.getNavigationMode()) {
case NAVIGATION_MODE_TABS:
selectTab(mTabs.get(position));
break;
case NAVIGATION_MODE_LIST:
mActionView.setDropdownSelectedPosition(position);
break;
default:
throw new IllegalStateException(
"setSelectedNavigationIndex not valid for current navigation mode");
}
}
当我浏览代码时,我发现导航模式仍然是NAVIGATION_MODE_TABS,尽管选项卡已显示为列表。我的第一反应是在onConfigurationChanged中加入代码以适当设置导航模式,但这是否应该自动完成呢?
P.S. 已经有一个Android bug有人提出,并包含了补丁。