在Android开发中ViewPager的使用是非常广泛的,而它不仅仅能够实现简单的开始引导页,还可以结合Fragment并添加Tab作为选项卡或为显示大批量页面实现强大的顺畅滑动
下面介绍两种为ViewPager+Fragment添加Tab的方式:
第一种:
在MainActivity布局中定义一个ViewPager
在MainActivity中声明ViewPager并实现它的Adapter继承自FragmentPagerAdapter首先需要通过重写有参的构造方法来获取FragmentManager对象,并重写一系列方法:1.在getItem中通过switch判定当前的ViewPager在第几个页面,返回对应的Fragment2.getCount最简单,直接返回想要创建的ViewPager的页数3.重写getPageTitle方法,通过其返回值来在标签上显示一些数据,(需要在创建标签时通过adapter调用该方法自己设置显示的数据)4.在MainActivity中获取ActionBar对象,通过action.newTab创建标签,通过action的addTab方法为ViewPager添加标签(通过for循环中的adapter的getCount方法作为条件来添加对应数量的标签)5.最后通过分别实现ViewPager和Tab的监听事件来实现ViewPager和Tab的一一对应mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { @Override public void onPageSelected(int position) { actionBar.setSelectedNavigationItem(position); }});
actionBar.newTab().setTabListener(new ActionBar.TabListener() { @Override public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) { mViewPager.setCurrentItem(tab.getPosition()); } @Override public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) { } @Override public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) { }});
第二种:
在CollectionDemoActivity的布局里存放一个ViewPager,并在顶部显示标签(需要写在ViewPager布局中)在CollectionDemoActivity中声明ViewPager并实现它的Adapter继承自FragmentStatePagerAdapter首先需要通过重写有参的构造方法来获取FragmentManager对象,并重写一系列方法:1.在getItem中绑定一个Fragment,并可以通过Bundle对其进行传值,最终返回fragment对象2.同上3.如果在布局中定义了ViewPager的顶部标签,需要在此重写getPageTitle方法,通过其返回值来在标签上显示一些数据4.在getItem中所绑定的Fragment布局中,定义想要显示的布局即可,并在Fragment中通过getArguments获取到Bundle传递的值
注意:FragmentPagerAdapter和FragmentStatePagerAdapter的区别
1.通过继承FragmentPagerAdapter创建的Fragment对象会永久存储在内存中,因此通常用于显示少量pager页面,像选项卡2.通过继承FragmentStatePagerAdapter只会保留至多三个pager页面(即当前页面,前一个和后一个,如果当前页面为首个,则只会存在两个),因此通常用于显示比较多的pager页面,像关联着ListView的pager页面