Android兩種為ViewPager+Fragment添加Tab的方式


在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頁面


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM