【问题标题】:How to implement sliding tab navigation with multiple fragments如何实现带有多个片段的滑动标签导航
【发布时间】:2015-01-25 10:07:34
【问题描述】:

我想为我的应用添加一些适当的导航。我有两个片段,我想制作一个标题条tabs(类似于 Play 报亭或具有材料设计的 Play 商店中的那个),在两个片段之间切换。我对ViewPagerPagerAdapter 不是很了解。我也在尝试使用this library。我不知道从哪里开始。提前致谢。

【问题讨论】:

标签: android material-design pagerslidingtabstrip


【解决方案1】:

实际上,我自己也做过一次。好的。

首先,将库添加到 build.gradle 文件中的依赖项中。

dependencies {
    compile 'com.jpardogo.materialtabstrip:library:1.0.6'
}

这就是我的 activity_main.xml 的样子。我从支持库中添加了PagerSlidingTabStrip(通过我自己的自定义,请参阅Github repo 了解更多信息)和我的ViewPager

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity"
tools:ignore="MergeRootFrame"
android:fitsSystemWindows="true" >

<include layout="@layout/toolbar" />

<com.astuetz.PagerSlidingTabStrip
    android:id="@+id/tabs"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:background="#33B5E5"
    android:textColor="#FFFFFF"
    app:pstsIndicatorColor="#FFFFFF"
    app:pstsPaddingMiddle="true" />

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

接下来,我在我的MainActivity.javaonCreate()方法中做了以下步骤:

    // Initialize the ViewPager and set an adapter
    ViewPager pager = (ViewPager) findViewById(R.id.pager);
    pager.setAdapter(new PagerAdapter(getSupportFragmentManager()));

    // Bind the tabs to the ViewPager
    PagerSlidingTabStrip tabs = (PagerSlidingTabStrip) findViewById(R.id.tabs);
    tabs.setViewPager(pager);

最后是FragmentPagerAdapter 类,也在MainActivity.java 中。注意Fragment getItem() 方法;这是我使用标签的位置在我的片段之间切换的地方。

class PagerAdapter extends FragmentPagerAdapter {

private final String[] TITLES = {"Regular Tenses", "Perfect Tenses"};

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

@Override
public CharSequence getPageTitle(int position) {
    return TITLES[position];
}

@Override
public int getCount() {
    return TITLES.length;
}

@Override
public Fragment getItem(int position) {
    switch (position) {
        case 0:
            return new MainFragment();
        case 1:
            return new PerfectFragment();
    }

    return null;
   }
}

【讨论】:

  • 实际上我是使用分页标签条的新手,我一直在使用工具栏进行材料设计。库PagerSlidingTabStrip 是否使用工具栏为您工作?
  • @Dory 该库与支持库中的工具栏完美配合。
  • 我可以在一个片段中实现所有这些吗?
  • @Mike 我不明白为什么不这样做!
【解决方案2】:

如果您的应用有 ActionBar,您可以使用setNavigationMode(NAVIGATION_MODE_TABS)HereAdding Navigation Tabs 副标题下有一个 sn-p 代码示例和说明。 Here 用于带有 ActionBar 的可滑动标签。

【讨论】:

  • API 21 不推荐使用方法 setNavigationMode(ActionBar.NAVIGATION_MODE_TABS)。
  • thks,你知道建议的替代方案是什么吗?
  • 终于试了一下,我真的不太喜欢:太多元素同时移动,在我看来。
  • 而且被选中的标题经常被限制在版面的边缘。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多