公司项目需要用到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
- 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();
- }
- }
效果如图
支持左右滑动