我正在使用Google的新工具来启动一个能够在三个标签之间切换的应用程序。
这很棒,但缺乏对旧设备的支持。
1. 我在应用程序中添加了带支持库的ABS。
2。我将public class MainActivity extends FragmentActivity implements ActionBar.TabListener {
更改为public class MainActivity extends SherlockFragmentActivity implements ActionBar.TabListener {
3。我还有很多错误,我甚至不知道这是否能在旧设备上正常运行。有没有人有关于如何实现与2.x及更高版本兼容的滑动标签的任何提示?
我被困在alextsc答案的第6步
答案 0 :(得分:15)
我试过这个向导一次,当我用ActionBarSherlock实现这个确切的模式时,我认为我完全丢弃了生成的代码,所以我建议你从头开始一个正常的“空白”活动。这是一个小步骤指南。并非所有步骤都已完整描述,但您应该找到足够的关键字文档来开始。
1)将ActionBarSherlock添加到您的项目中(显然)
2)创建一个扩展SherlockFragmentActivity
并设置正确的abs主题的新活动
此时您应该有一个带有操作栏的空白活动。
3)更改布局并包含填充视口的ViewPager
4)写下你的片段(或现在的占位符)和ViewPager的适配器,将它们连接在一起
有很多教程可以解释这里所有必要的内容,例如: this blog post。
这应该为您提供一个带有操作栏和可跳过布局的活动。您现在可以在片段之间滑动。
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);
}
}
};
这应该是直截了当的。您监听选项卡选择事件,检查通过已保存标记选择了哪个选项卡,并使用与某个选项卡关联的片段的索引调用viewpagers setCurrentItem()
方法。
现在您应该可以通过选项卡选择片段以及向左滑动。你会注意到,滑动到某个片段不会相应地同步标签,它们也不会被正确选择。
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步中的选项卡实例,您需要它们来选择选项卡。
现在一切都应该有效。
答案 1 :(得分:3)
完全相同的过程对我有用。我删除了所有导入,然后按ctrl + shift + o并选择了兼容性类。它的工作非常好。请参阅帖子here。
答案 2 :(得分:0)
我使用actionbar sherlock实现了非常复杂的应用程序。它在我测试过的ICS设备上运行良好。我也使用了标签,一切正常。我稍后将其更改为导航列表,因为应该有6个选项卡。 尝试使用动作栏中包含的演示开始。 这个错误可能是一些类路径问题。你需要添加sherlock作为lib项目和 支持库必须包含在sherlock lib项目和项目中。还要检查两个支持库是否必须具有相同的版本。
答案 3 :(得分:0)
我建议看看ViewPagerIndicator它与ActionBarSherlock和兼容性库一起使用,我目前有一个应用程序使用它来刷2.2和以上的标签。
答案 4 :(得分:0)
我无法添加评论,因此这是我对ViewPagerIndicator的评论。我曾经习惯但是当我开始使用加载器来加载数据和fragmentadapter时,有时会出现新的数据时出现奇怪的问题,方向发生了变化......但是使用带有actionbarsherlock的标签不需要ViewPagerIndicator。