注意:我們還必須刪除ViewPagerAndTab工程libs下面的android-support-v4.jar包,因爲在ActionBarSherlock已經包含android-support-v4.jar
3.ViewPager的適配器TabPagerAdapter,因爲我們用到Fragment,所以我們繼承FragmentStatePagerAdapter而不是PagerAdapter
- package com.example.viewpagerandtabdemo;
- import java.util.List;
- import android.support.v4.app.Fragment;
- import android.support.v4.app.FragmentManager;
- import android.support.v4.app.FragmentStatePagerAdapter;
- public class TabPagerAdapter extends FragmentStatePagerAdapter {
- private List<Fragment> list;
- //構造函數
package com.Garry.viwepagerdemo; import java.util.ArrayList; import java.util.List; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentTransaction; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; import com.Garry.viwepagerdemo.adapter.TabPagerAdapter; import com.Garry.viwepagerdemo.fragment.ItemFragment; import com.actionbarsherlock.app.ActionBar; import com.actionbarsherlock.app.ActionBar.Tab; import com.actionbarsherlock.app.SherlockFragmentActivity; public class MainActivity extends SherlockFragmentActivity implements ActionBar.TabListener, OnPageChangeListener { /** * 頂部Tab的title */ private String[] mTabTitles; /** * ViewPager 對象引用 */ private ViewPager mViewPager; /** * 裝載Fragment的容器,每個界面都是一個Fragment */ private List<Fragment> mFragmentList; /** * ActionBar對象的引用 */ private ActionBar mActionBar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 從資源文件獲取Tab的Title mTabTitles = getResources().getStringArray(R.array.tab_title); mFragmentList = new ArrayList<Fragment>(); mViewPager = (ViewPager) findViewById(R.id.viewPager); // 設置Adapter mViewPager.setAdapter(new TabPagerAdapter(getSupportFragmentManager(), mFragmentList)); // 設置監聽 mViewPager.setOnPageChangeListener(this); // 獲取Action實例我們使用getSupportActionBar()方法 mActionBar = getSupportActionBar(); // 隱藏Title mActionBar.setDisplayShowTitleEnabled(false); // 隱藏Home logo mActionBar.setDisplayShowHomeEnabled(false); // 設置ActionBar的導航模式爲Tab mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); // 爲ActionBar添加Tab並設置TabListener for (int i = 0; i < mTabTitles.length; i++) { ActionBar.Tab tab = mActionBar.newTab(); tab.setText(mTabTitles[i]); tab.setTabListener(this); mActionBar.addTab(tab, i); } // 將Fragment加入到List中,並將Tab的title傳遞給Fragment for (int i = 0; i < mTabTitles.length; i++) { Fragment fragment = new ItemFragment(); Bundle args = new Bundle(); args.putString("arg", mTabTitles[i]); fragment.setArguments(args); mFragmentList.add(fragment); } } @Override public void onPageScrollStateChanged(int arg0) { } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } @Override public void onPageSelected(int arg0) { //滑動ViewPager的時候設置相對應ActionBar Tab被選中 mActionBar.setSelectedNavigationItem(arg0); } @Override public void onTabSelected(Tab tab, FragmentTransaction ft) { //點擊actionBar Tab的時候切換不同Fragment界面 mViewPager.setCurrentItem(tab.getPosition()); } @Override public void onTabUnselected(Tab tab, FragmentTransaction ft) { } @Override public void onTabReselected(Tab tab, FragmentTransaction ft) { } }
- public TabPagerAdapter(FragmentManager fm, List<Fragment> list) {
- super(fm);
- this.list = list;
- }
- @Override
- public Fragment getItem(int arg0) {
- return list.get(arg0);
- }
- @Override
- public int getCount() {
- return list.size();
- }
- }