在Android開發中ViewPager的使用是非常廣泛的,而它不僅僅能夠實現簡單的開始引導頁,還可以結合Fragment並添加Tab作為選項卡或為顯示大批量頁面實現強大的順暢滑動
下面介紹兩種為ViewPager+Fragment添加Tab的方式:
第一種:
在MainActivity布局中定義一個ViewPager
在MainActivity中聲明ViewPager並實現它的Adapter繼承自FragmentPagerAdapter
首先需要通過重寫有參的構造方法來獲取FragmentManager對象,並重寫一系列方法:
1.在getItem中通過switch判定當前的ViewPager在第幾個頁面,返回對應的Fragment
2.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頁面
