API 21 滑动选项卡活动

3

我希望有两个选项卡来在不同的Fragment之间进行导航,以前我使用过老方法,但现在API 21已经弃用了所有的方法。我搜索了很多资料,但没有找到任何教程或示例。我尝试了Google的SlidingTabs示例,但它不适用于Eclipse,所以我不知道如何将其集成到我的应用程序中。有人可以帮助我吗?也许给我一个基本教程的链接?谢谢!

3个回答

1

只需在您的项目中导入这两个类:SlidingTabStripSlidingTabLayout,即可在应用程序中使用选项卡。您可以查看示例项目以了解如何使用它。

非常简单易用。首先将这两个类导入到您的项目中,并在xml布局(my_layout.xml)中添加SlidingTabLayout。如果您想要与ViewPager一起使用,我还添加了一个viewPager:

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"      
    android:orientation="vertical"
    android:paddingRight="@dimen/activity_horizontal_margin"
    tools:context="MyActivity">

      <SlidingTabLayout
            android:id="@+id/sliding_tabs"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

     <android.support.v4.view.ViewPager
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:id="@+id/my_pager" />  

</LinearLayout>

在你的活动中,
public class MyActivity extends ActionBarActivity {
      private SlidingTabLayout slidingTabLayout;
      private ViewPager viewPager;

      @Override
      protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.my_layout);         

         viewPager = (ViewPager) findViewById(R.id.my_pager);
         viewPager.setAdapter(new MyAdapter(getSupportFragmentManager()));

         slidingTabLayout = (SlidingTabLayout)findViewById(R.id.sliding_tabs);
         slidingTabLayout.setViewPager(viewPager);
     }
}

然后,您可以定义适配器,将其添加到SlidingTabLayout中。例如:

public static class MyAdapter extends FragmentPagerAdapter {
    private static final int FRAGMENT_1 = 0;
    private static final int FRAGMENT_2 = 1;
    private static final int FRAGMENT_3 = 2;

    public MyAdapter (FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int i) {
        switch (i){
            case FRAGMENT_1 : return new Fragment1();
            case FRAGMENT_2 : return new Fragment2();
            case FRAGMENT_3 : return new Fragment3();
        }
        return null;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        switch (position){
            case FRAGMENT_1 : return "Fragment 1 Title";
            case FRAGMENT_2 : return "Fragment 2 title";
            case FRAGMENT_3 : return "Fragment 3 Title";
        }
        return super.getPageTitle(position);
    }

    @Override
    public int getCount() {
        return 3;
    }
}

我遇到了一个错误:无法解析Fragment1()...我该怎么办?顺便感谢你的帮助! - MattButtMatt
我已经完成了,但我的应用在启动时崩溃,错误是:12-02 22:23:52.400: E/AndroidRuntime(15558): Caused by: android.view.InflateException: Binary XML file line #7: Error inflating class SlidingTabLayout。 - MattButtMatt
在xml布局中,使用完整包名引入slidingTabLayout。例如org.myclass.view.SlidingTabLayout。 - Dimitri
你试过了吗?因为现在应用程序不会崩溃,但是滑动不流畅,在选项卡之间卡住,如果我点击一个选项卡,它不会改变片段。 - MattButtMatt
2
我提供的这段代码片段来自我正在开发的应用程序。稍后我会检查它是否正常工作并给你一个完整的答案。但通常情况下,一切都应该正常工作。 - Dimitri
显示剩余2条评论

1

请查看this,它可能会对您有所帮助,这是一个非常出色的菜单,可用于浏览片段。


我不想使用外部库,我想用Android小部件的正确方式来完成它... - MattButtMatt

0

如果你说的是一个ViewPager而不是一个NavigationDrawer类型的东西,它在API-21上仍然可以正常工作。

查看IOSched应用程序代码以获取类似“Google Play”的ViewPager指示器。

编辑

是的,setNavigationMode已被弃用为方法和UI/UX模式。

来自官方文档

This method was deprecated in API level 21.
Action bar navigation modes are deprecated and not supported by inline toolbar action bars.
Consider using other common navigation patterns instead.

链接到常见导航模式

编辑2

修复了iosched应用程序代码链接。


我已经实现了它,我的代码中没有任何过时的内容。请具体说明。 - shkschneider
我尝试使用ViewPager,但setNavigationMode已经被弃用。 - MattButtMatt
是的,setNavigationMode已被废弃作为一种方法和UI/UX模式。如果您正在寻找替代方法(未被废弃),请重新思考您的UI/UX,不要寻找未被废弃的setNavigationMode方法,因为据我所知,它不存在。这就是为什么推荐使用 NavigationDrawers 和 ViewPagers。 - shkschneider
我想要实现与新的Google联系人应用程序完全相同的功能,我只能使用ViewPager来实现吗? - MattButtMatt
当然(我做到了)。只使用ViewPager和选项卡条,就像IOSched应用程序一样。 - shkschneider
我终于做到了!原来你有最好的解决方案!非常感谢你,很抱歉浪费了你的时间! - MattButtMatt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接