Android ViewPager组件

历览千载书,时时见遗烈。这篇文章主要讲述Android ViewPager组件相关的知识,希望能为你提供帮助。
一、以代码的方式定义并产生布局
在界面构建过程中,会大量的使用XML文件,定义视图布局。下面尝试使用以代码的方式定义视图层级结构。使用代码方式定义视图,其实就是调用视图的构造方法。但是,在一些构建块中,依然要使用资源ID,ViewPager就是这样的一种构建块。而FragmentManager要求任何作Fragment容器的视图都必须具有资源ID。Viewpager是一个Fragment容器。
【Android ViewPager组件】以代码方式创建视图,应完成以下任务项:

  • 为ViewPager创建资源ID。
  • 创建ViewPager实例并赋值给ViewPager。
  • 赋值资源ID给ViewPager,并对其进行配置。
  • 设备ViewPager为Activity的内容视图。
1. 独立的资源ID
在res/values目录下创建名为ids.xml文件,用于存储资源ID。(ids.xml)
1 < ?xml version="1.0" encoding="utf-8"?> 2 < resources> 3< item type="id" name="viewPager" /> 4 < /resources>

2. 以代码方式创建内容视图(CrimeViewPager.java)
1 // 实例化ViewPager 2 mViewPager = new ViewPager(this); 3 // 为ViewPager实例配置资源ID 4 mViewPager.setId(R.id.viewPager); 5 // 设置为Activity的容器 6 setContentView(mViewPager);

3. ViewPager与PagerAdapter (视图显示数据的数据源)
1 public class CrimePagerActivity extends SingleFragmentActivity 2 { 3private ViewPager mViewPager; 4private ArrayList< Crime> mCrimes; 5 6public CrimePagerActivity() 7{ 8} 9 10@Override 11public Fragment createFragment() 12{ 13return null; 14} 15 16@Override 17public void onCreate(Bundle savedInstanceState) 18{ 19super.onCreate(savedInstanceState); 20 21// 实例化ViewPager 22mViewPager = new ViewPager(this); 23// 为ViewPager实例配置资源ID 24mViewPager.setId(R.id.viewPager); 25// 设置为Activity的容器 26setContentView(mViewPager); 27 28mCrimes = CrimeLab.get(this).getCrimes(); 29 30// fragment manager 31FragmentManager fm = getSupportFragmentManager(); 32mViewPager.setAdapter(new FragmentStatePagerAdapter(fm) 33{ 34// 获取当前视图的Fragment对象 35@Override 36public Fragment getItem(int position) 37{ 38Crime crime = mCrimes.get(position); 39return CrimeFragment.newInstance(crime.getmId()); 40} 41 42// 获取数据条数,计算显示视图个数 43@Override 44public int getCount() 45{ 46return mCrimes.size(); 47} 48}); 49 50// 设置从列表进入详细界面的具体数据 51for (int idx = 0; idx < mCrimes.size(); idx++) 52{ 53UUID code = (UUID) getIntent().getSerializableExtra(CrimeFragment.sExtra_Crime_ID); 54if (mCrimes.get(idx).getmId().equals(code)) 55{ 56// 设置界面当前显示的View 57mViewPager.setCurrentItem(idx); 58break; 59} 60} 61} 62 }

PS:可以通过方法设置当前页面预加载相邻页面数目:
1 // 定制预加载相邻页面的数目 2 mViewPager.setOffscreenPageLimit(3);

4. 通过方法监听界面间的切换
1 mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() 2{ 3@Override 4public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) 5{ 6 7} 8 9@Override 10public void onPageSelected(int position) 11{ 12Crime crime = mCrimes.get(position); 13if (null != crime.getmTitle()) 14{ 15setTitle(crime.getmTitle()); 16} 17} 18 19@Override 20public void onPageScrollStateChanged(int state) 21{ 22 23} 24});

 

    推荐阅读