Android Tabs + Sliding,如何实现ActionBarSherlock?

时间:2012-08-30 18:02:08

标签: java android android-actionbar actionbarsherlock

我正在使用Google的新工具来启动一个能够在三个标签之间切换的应用程序。

enter image description here

这很棒,但缺乏对旧设备的支持。

1. 我在应用程序中添加了带支持库的ABS。

2。我将public class MainActivity extends FragmentActivity implements ActionBar.TabListener {更改为public class MainActivity extends SherlockFragmentActivity implements ActionBar.TabListener {

3。我还有很多错误,我甚至不知道这是否能在旧设备上正常运行。有没有人有关于如何实现与2.x及更高版本兼容的滑动标签的任何提示?

enter image description here

更新

我被困在alextsc答案的第6步 enter image description here

5 个答案:

答案 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。