ViewPager 和 ActionBarSherlock 的使用 <Garry進階(一)>

        公司項目需要用到ViewPager,google發現需要需要學習的知識點,這裏開始一一介紹
         首先,你需要學會google,在github上,有很多優秀的源碼,這裏,我就使用了JackWharton的開源代碼 ,下載地址:https://github.com/JakeWharton/ActionBarSherlock,下載完解壓如下:


把圖中紅框裏邊的文件導入你的程序中,這裏有個注意事項,actionbarsherlock-samples裏邊有兩個文件會重名,需要重命名
我將其中一個命名爲sampleList1,另外,設置properties,

至此,需要用到的都導入成功了,接下來,
1、新建一個項目,先處理佈局,如圖
        就一個viewPager ,十分簡單
2、處理Activity代碼

我們使用ActionBarSherlock的時候不再是繼承Activity,而是繼承SherlockActivity,SherlockDialogFragment,SherlockFragmentActivity等等,我這裏用到Fragment,所以繼承SherlockFragmentActivity,我們不能隨便設置Activity的theme,以後我們要全屏顯示的時候直接設置android:theme="@android:style/Theme.Black.NoTitleBar",我們使用ActionBar就不能這樣設置了,並且不能隨便設置他的Theme,必須是Theme.Sherlock, Theme.Sherlock.Light, Theme.Sherlock.Light.DarkActionBar,或者是他們的子樣式,不然就會出java.lang.IllegalStateException異常,所以爲了自定義ActionBar的Tab,我們必須修改其style

注意:我們還必須刪除ViewPagerAndTab工程libs下面的android-support-v4.jar包,因爲在ActionBarSherlock已經包含android-support-v4.jar


3.ViewPager的適配器TabPagerAdapter,因爲我們用到Fragment,所以我們繼承FragmentStatePagerAdapter而不是PagerAdapter

  1. package com.example.viewpagerandtabdemo;  
  2.   
  3. import java.util.List;  
  4.   
  5. import android.support.v4.app.Fragment;  
  6. import android.support.v4.app.FragmentManager;  
  7. import android.support.v4.app.FragmentStatePagerAdapter;  
  8.   
  9. public class TabPagerAdapter extends FragmentStatePagerAdapter {  
  10.     private List<Fragment> list;  
  11.       
  12.     //構造函數  
    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) {
    
     }
    
    }
    

  13.     public TabPagerAdapter(FragmentManager fm, List<Fragment> list) {  
  14.         super(fm);  
  15.         this.list = list;  
  16.     }  
  17.   
  18.     @Override  
  19.     public Fragment getItem(int arg0) {  
  20.         return list.get(arg0);  
  21.     }  
  22.   
  23.     @Override  
  24.     public int getCount() {  
  25.         return list.size();  
  26.     }  
  27.   
  28. }  
效果如圖
 
支持左右滑動
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章