6

我正在使用 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步 在此处输入图像描述

4

5 回答 5

15

我试过这个向导一次,我想当我用 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 中的选项卡实例,您需要它们来选择一个选项卡。

现在一切都应该正常了。

于 2012-08-30T18:42:42.487 回答
3

完全相同的过程对我有用。我删除了所有导入,然后按 ctrl+shift+o 并选择了兼容性类。它工作得非常好。看这里的帖子。

于 2013-01-20T16:55:05.067 回答
0

我已经使用 actionbar sherlock 实现了非常复杂的应用程序。它在我测试过的 2.2 到 ICS 设备上运行良好。我还使用了标签,一切正常。我后来将其更改为导航列表,因为应该有 6 个选项卡。尝试从操作栏包含的演示开始。这个错误可能是一些类路径问题。您需要将 sherlock 添加为 lib 项目,并且支持库必须包含在 sherlock lib 项目和您的项目中。还要检查两个支持库是否必须具有相同的版本。

于 2012-08-30T18:21:51.700 回答
0

我建议看一下ViewPagerIndicator它与 ActionBarSherlock 和兼容性库一起使用,我目前有一个应用程序使用它在 2.2 及更高版本上滑动标签。

于 2012-08-30T18:25:35.157 回答
0

我无法添加评论,所以这是我对 ViewPagerIndicator 的评论。我已经习惯了,但是当我开始使用加载器加载数据和片段适配器时,有时会出现奇怪的问题,当新数据到来时,方向发生了变化......但是使用带有 actionbarsherlock ViewPagerIndicator 的选项卡是没有必要的。

于 2012-08-30T18:42:46.497 回答