Android Tabs + Sliding,如何实现ActionBarSherlock?

EGH*_*HDK 6 java android actionbarsherlock android-actionbar

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

小智 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);
Run Code Online (Sandbox Code Playgroud)

确保为每个选项卡指定一个单独的标记(字符串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);
        }
    }
};
Run Code Online (Sandbox Code Playgroud)

这应该是直截了当的.您侦听选项卡选择事件,检查通过已保存标记选择的选项卡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;
        }
    };
};
Run Code Online (Sandbox Code Playgroud)

这也应该是不言自明的.您会看到一个滑动操作,它会更改显示的片段,检查它的索引并选择相应的选项卡.您在此处看到为什么必须保留第5步中的选项卡实例,您需要它们来选择选项卡.

现在一切都应该有效.


Amo*_*pta 3

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