Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 安卓标签+;滑动,如何实现ActionBarSherlock?_Java_Android_Android Actionbar_Actionbarsherlock - Fatal编程技术网

Java 安卓标签+;滑动,如何实现ActionBarSherlock?

Java 安卓标签+;滑动,如何实现ActionBarSherlock?,java,android,android-actionbar,actionbarsherlock,Java,Android,Android Actionbar,Actionbarsherlock,我正在使用谷歌的新工具启动一个能够在三个选项卡之间切换的应用程序 这很好,但缺少对旧设备的支持 1。我将带有支持库的ABS添加到应用程序中 2.我将公共类main活动扩展片段活动实现ActionBar.TabListener{更改为公共类main活动扩展SherlockFragmentActivity实现ActionBar.TabListener{ 3.我仍然有很多错误,我甚至不知道这是否能在旧设备上正常工作。有人知道如何实现与2.x及更高版本兼容的滑动标签吗 更新: 我被alextsc回答

我正在使用谷歌的新工具启动一个能够在三个选项卡之间切换的应用程序

这很好,但缺少对旧设备的支持

1。我将带有支持库的ABS添加到应用程序中

2.我将
公共类main活动扩展片段活动实现ActionBar.TabListener{
更改为
公共类main活动扩展SherlockFragmentActivity实现ActionBar.TabListener{

3.我仍然有很多错误,我甚至不知道这是否能在旧设备上正常工作。有人知道如何实现与2.x及更高版本兼容的滑动标签吗

更新: 我被alextsc回答的第六步卡住了

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

我建议您查看一下它与ActionBarSherlock和兼容性库的配合情况。我目前有一个应用程序使用它在2.2及更高版本上滑动选项卡。

我尝试了一次此向导当我用ActionBarSherlock实现这个模式时,我想我完全抛弃了生成的代码,所以我建议你从头开始一个正常的“空白”活动。这是一个小的分步指南。并不是所有的步骤都有完整的描述,但你应该找到足够的带有关键字的文档来开始

1)将ActionBarSherlock添加到项目中(显然)

2)创建一个新的活动,扩展
SherlockFragmentActivity
并设置一个合适的abs主题

此时,您应该有一个带有操作栏的空白活动

3)更改布局并包括一个填充视口的ViewPager

4)编写片段(或占位符)和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);
        }
    }
};
有很多教程解释了这里所需的一切,例如

这将为您提供一个带有操作栏和可滑动布局的活动。您现在可以在片段之间滑动

5)添加操作栏选项卡并将空白选项卡侦听器附加到它们上

例如:

actionBar = getSupportActionBar();

sampleTab = actionBar.newTab()
    .setText(R.string.title)
    .setTag(TABTAG_SAMPLE)
    .setTabListener(tabListener);

actionBar.addTab(sampleTab);
确保为每个选项卡提供一个单独的标记(字符串常量可以)。这将用于标识在一秒钟内单击了哪个选项卡。还要确保将创建的选项卡实例保留在类变量中。以后您将需要它们。对每个选项卡重复上述代码段。您可以使用普通的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);
        }
    }
};
这应该很简单。您可以侦听tab select事件,检查通过保存的标记选择的选项卡,并使用与特定选项卡关联的片段索引调用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中的选项卡实例,您需要它们选择选项卡


现在一切都应该正常了。

我不能添加注释,所以这是我对ViewPagerIndicator的注释。我曾经这样做过,但当我开始使用加载程序加载数据和fragmentadapter时,有时在新数据出现时会出现奇怪的问题,方向发生了变化……但使用actionbarsherlock ViewPagerIndicator的选项卡是不必要的。

我删除了所有的导入,然后按ctrl+shift+o并选择了兼容类。效果非常好。请参阅帖子。

Woah,结果很长。很好的小教程。VeiwPager有点问题,但你的回答帮助我认识到“应用程序”是什么必须这样做才能在所有设备上工作。太好了!再次感谢。很棒的ViewPager教程。关于第6步的任何帮助?无法使其工作。更新了我的问题。首先,尚未找到ViewPager,在我的情况下,这是一个类成员。您可以相应地修改文章并使用
ViewPager ViewPager=(ViewPager)findViewById(您的ViewPager的R.id);
在方法开始时获取对它的引用。INDEX_SAMPLE和INDEX_SECONDFRAGMENT只是整数常量,例如,像
private static final int INDEX_SAMPLE=0;
。数字取决于您的viewpager适配器,0显示第一个片段,1显示第二个片段,依此类推。稍后将尝试此操作。感谢您的帮助向上!这非常有效。比尝试立即重做Google提供给您的任何内容都要简单得多。感谢Amothanks!别忘了使用最新的支持库来避免旋转手机的问题。