增加视图页中可见选项卡的数量



我在Viewpager中总共有5个片段,我想在当前可见选项卡的两侧显示2个选项卡。

示例:我当前的选项卡是 2 。我希望立即显示选项卡 0、左侧选项卡 1 和右侧选项卡 3、选项卡 4。

我尝试设置viewPager.setOffscreenPageLimit(2(,但它不起作用。我仍然只看到两侧显示 1 个选项卡。我错过了什么?

public class TabsFragment extends Fragment {
    mViewPager = (ViewPager) view.findViewById(R.id.pager);
    titleStrip = (PagerTitleStrip) view.findViewById(R.id.titlestrip);
    adapter = new TabsPagerAdapter(getChildFragmentManager(), getActivity());
    mViewPager.setAdapter(adapter);
    mViewPager.setOffscreenPageLimit(2);
    mViewPager.setCurrentItem(2);
 }
public class TabsPagerAdapter extends FragmentStatePagerAdapter {
private Context context;
public TabsPagerAdapter(FragmentManager fm, Context c) {
    super(fm);
    context = c;
}
@Override
public Fragment getItem(int index) {
    switch (index) {
        case 0:
            return new FirstFrag();
        case 1:
            return new SecondFrag();
        case 2:
            return new ThirdFrag();
        case 3:
            return new FourthFrag();
        case 4:
            return new FifthFrag();
        default:
            return new SecondFrag();
    }
}
@Override
public int getCount() {
    // get item count - equal to number of tabs
    return 5;
}
}

通过使用 TabLayout 解决了此问题。发布代码供将来的读者使用。

<android.support.design.widget.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/ThemeOverlay.AppCompat.Light">
   <android.support.v7.widget.Toolbar
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/awesome_toolbar"
        android:layout_width="match_parent"
        android:layout_height="74dp"
        android:background="#ff31353f"
        android:paddingTop="20dp"
        app:popupTheme="@style/AppTheme"
        app:theme="@style/ToolbarTheme"/>
    <android.support.design.widget.TabLayout
        android:id="@+id/tabs"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:tabMode="scrollable"/>
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</android.support.design.widget.CoordinatorLayout>
public class TabsFragment extends Fragment {
 @Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    mViewPager = (ViewPager) view.findViewById(R.id.pager);
    tabLayout = (TabLayout)view.findViewById(R.id.tabs);
    adapter = new TabsPagerAdapter(getChildFragmentManager(), getActivity());
    adapter.addFragment(new FirstFrag(), getResources().getString(R.string.frag1));
    adapter.addFragment(new SecondFrag(), getResources().getString(R.string.frag2));
    adapter.addFragment(new ThirdFrag(), getResources().getString(R.string.frag3));
    adapter.addFragment(new FourthFrag(), getResources().getString(R.string.frag4));
    adapter.addFragment(new FifthFrag(), getResources().getString(R.string.frag5));
    mViewPager.setAdapter(adapter);
    mViewPager.setOffscreenPageLimit(2);
    mViewPager.setCurrentItem(2);
    tabLayout.setupWithViewPager(mViewPager);
}
您需要

修改ViewPager适配器。重写 public Fragment getItem(int position) 方法,并创建一个自定义Fragment,该片段将包含当前片段和左侧位置 1 中的片段,右侧位置 + 1 中的片段。您可能还必须重写 public int getCount() 方法。我以前没有尝试过这样的实现,但我认为这是解决这个问题的方法。

最新更新