我试过这个向导一次,我想当我用 ActionBarSherlock 实现这个确切的模式时,我完全丢弃了生成的代码,所以我建议你从头开始一个正常的“空白”活动。这是一个小的分步指南。并非所有步骤都被完整描述,但您应该找到足够的包含关键字的文档来开始。
1)将 ActionBarSherlock 添加到您的项目中(显然)
2)创建一个扩展SherlockFragmentActivity
并设置适当的abs主题的新活动
此时您应该有一个带有操作栏的空白活动。
3) 更改布局并包含一个填充视口的 ViewPager
4)写你的片段(或占位符)和 ViewPager 的适配器,将它们连接在一起
有很多教程可以解释这里的所有必要内容,例如这篇博文。
这应该为您提供一个带有操作栏和可滑动布局的活动。您现在可以在片段之间滑动。
5)添加操作栏选项卡并为其附加一个空白选项卡侦听器
例子:
actionBar = getSupportActionBar();
sampleTab = actionBar.newTab()
.setText(R.string.title)
.setTag(TABTAG_SAMPLE)
.setTabListener(tabListener);
actionBar.addTab(sampleTab);
确保给每个选项卡一个单独的标签(字符串 const 很好)。这将用于识别在一秒钟内单击了哪个选项卡。还要确保将创建的选项卡实例保存在类变量中。稍后您将需要它们。对每个选项卡重复上述代码段。您可以使用普通的 TabListener,但我建议您使用 SimpleTabListener,因为您以后只需要覆盖一个方法。
现在您应该有一个带有操作栏、可滑动片段和(非功能性)选项卡的活动。
6)填充选项卡侦听器并将其连接到viewpager
private SimpleTabListener tabListener = new SimpleTabListener() {
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
final String tag = (String) tab.getTag();
if (TABTAG_SAMPLE.equals(tag)) {
viewPager.setCurrentItem(INDEX_SAMPLE);
} else if (TABTAG_SECONDTAB.equals(tag)) {
viewPager.setCurrentItem(INDEX_SECONDFRAGMENT);
}
}
};
这应该很简单。您侦听选项卡选择事件,通过保存的标记检查选择了哪个选项卡,并setCurrentItem()
使用与某个选项卡关联的片段的索引调用 viewpagers 方法。
现在您应该能够通过选项卡选择片段以及左右滑动。您会注意到滑动到某个片段不会相应地同步选项卡,它们不会被正确选择。
7) 将 OnPageChangeListener 附加到您的 ViewPager 并相应地选择选项卡
同样,您也可以在此处使用 SimpleOnPageChangeListener 而不是接口。简短的例子:
private SimpleOnPageChangeListener onPageChangeListener
= new SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
switch (position) {
case INDEX_SAMPLE:
actionBar.selectTab(sampleTab);
break;
case INDEX_SECONDFRAGMENT:
actionBar.selectTab(secondTab);
break;
}
};
};
这也应该是不言自明的。您注意更改显示片段的滑动操作,检查它的索引并选择适当的选项卡。您在这里看到了为什么必须保留步骤 5 中的选项卡实例,您需要它们来选择一个选项卡。
现在一切都应该正常了。