ViewPager 和 ActionBarSherlock 的使用 <Garry进阶(一)>

来源:互联网 发布:手机淘宝怎么看直通车 编辑:程序博客网 时间:2024/06/10 16:48
        本文参考:http://blog.csdn.net/xiaanming/article/details/9971721
        公司项目需要用到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

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  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. }  
效果如图
 
支持左右滑动
0 0