首页 > 代码库 > Android ViewPager组件
Android ViewPager组件
一、以代码的方式定义并产生布局
在界面构建过程中,会大量的使用XML文件,定义视图布局。下面尝试使用以代码的方式定义视图层级结构。使用代码方式定义视图,其实就是调用视图的构造方法。但是,在一些构建块中,依然要使用资源ID,ViewPager就是这样的一种构建块。而FragmentManager要求任何作Fragment容器的视图都必须具有资源ID。Viewpager是一个Fragment容器。
以代码方式创建视图,应完成以下任务项:
- 为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 // 实例化ViewPager2 mViewPager = new ViewPager(this);3 // 为ViewPager实例配置资源ID4 mViewPager.setId(R.id.viewPager);5 // 设置为Activity的容器6 setContentView(mViewPager);
3. ViewPager与PagerAdapter (视图显示数据的数据源)
1 public class CrimePagerActivity extends SingleFragmentActivity 2 { 3 private ViewPager mViewPager; 4 private ArrayList<Crime> mCrimes; 5 6 public CrimePagerActivity() 7 { 8 } 9 10 @Override11 public Fragment createFragment()12 {13 return null;14 }15 16 @Override17 public void onCreate(Bundle savedInstanceState)18 {19 super.onCreate(savedInstanceState);20 21 // 实例化ViewPager22 mViewPager = new ViewPager(this);23 // 为ViewPager实例配置资源ID24 mViewPager.setId(R.id.viewPager);25 // 设置为Activity的容器26 setContentView(mViewPager);27 28 mCrimes = CrimeLab.get(this).getCrimes();29 30 // fragment manager31 FragmentManager fm = getSupportFragmentManager();32 mViewPager.setAdapter(new FragmentStatePagerAdapter(fm)33 {34 // 获取当前视图的Fragment对象35 @Override36 public Fragment getItem(int position)37 {38 Crime crime = mCrimes.get(position);39 return CrimeFragment.newInstance(crime.getmId());40 }41 42 // 获取数据条数,计算显示视图个数43 @Override44 public int getCount()45 {46 return mCrimes.size();47 }48 });49 50 // 设置从列表进入详细界面的具体数据51 for (int idx = 0; idx < mCrimes.size(); idx++)52 {53 UUID code = (UUID) getIntent().getSerializableExtra(CrimeFragment.sExtra_Crime_ID);54 if (mCrimes.get(idx).getmId().equals(code))55 {56 // 设置界面当前显示的View57 mViewPager.setCurrentItem(idx);58 break;59 }60 }61 }62 }
PS:可以通过方法设置当前页面预加载相邻页面数目:
1 // 定制预加载相邻页面的数目2 mViewPager.setOffscreenPageLimit(3);
4. 通过方法监听界面间的切换
1 mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() 2 { 3 @Override 4 public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) 5 { 6 7 } 8 9 @Override10 public void onPageSelected(int position)11 {12 Crime crime = mCrimes.get(position);13 if (null != crime.getmTitle())14 {15 setTitle(crime.getmTitle());16 }17 }18 19 @Override20 public void onPageScrollStateChanged(int state)21 {22 23 }24 });
Android ViewPager组件
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。