android开发之ViewPager

来源:互联网 发布:access数据库怎么打开 编辑:程序博客网 时间:2024/06/04 20:06

一、ViewPager是什么?
ViewPager的使用,除了用于View切换之外,还可用于Fragment切换。

单独使用Fragment经常会遇到一些问题,比如Fragment切换时,显示和隐藏的Fragment有时候会出现重叠,导致相互之间的UI和事件混乱。结合ViewPager的使用,则可以避免掉大部分的问题。

ViewPager是android扩展包v4包中的类,这个类可以让用户左右切换当前的view
1)ViewPager类直接继承了ViewGroup类,所有它是一个容器类,可以在其中添加其他的view类。
2)ViewPager类需要一个PagerAdapter适配器类给它提供数据。
3)ViewPager经常和Fragment一起使用,并且提供了专门的FragmentPagerAdapter和FragmentStatePagerAdapter类供Fragment中的ViewPager使用。

二、ViewPager的适配器
PagerAdapter和ListView等控件使用一样,需要ViewPager设置PagerAdapter来完成页面和数据的绑定,这个PagerAdapter是一个基类适配器,我们经常用它来实现app引导图。
它的子类有FragmentPagerAdapter和FragmentStatePagerAdapter,这两个子类适配器用于和Fragment一起使用。

1.实现一个最基本的PagerAdapter:

public class AdapterViewpager extends PagerAdapter { private List<View> mViewList; public AdapterViewpager(List<View> mViewList) {     this.mViewList = mViewList; } @Override public int getCount() {//必须实现     return mViewList.size(); } @Override public boolean isViewFromObject(View view, Object object) {//必须实现     return view == object; } @Override public Object instantiateItem(ViewGroup container, int position) {//必须实现,实例化     container.addView(mViewList.get(position));     return mViewList.get(position); } @Override public void destroyItem(ViewGroup container, int position, Object object) {//必须实现,销毁    container.removeView(mViewList.get(position)); } }

2.实现一个最基本的FragmentPagerAdapter:

public class AdapterFragment extends FragmentPagerAdapter { private List<Fragment> mFragments; public AdapterFragment(FragmentManager fm, List<Fragment> mFragments) {     super(fm);     this.mFragments = mFragments; } @Override /*** 获取给定位置对应的Fragment。** @param position 给定的位置* @return 对应的Fragment*/public Fragment getItem(int position) {//必须实现     return mFragments.get(position); } @Override public int getCount() {//必须实现     return mFragments.size(); } @Override public CharSequence getPageTitle(int position) {//选择性实现     return mFragments.get(position).getClass().getSimpleName(); } }/** * 获取给定位置的项Id,用于生成Fragment名称 * * @param position 给定的位置 * @return 项Id */public long getItemId(int position) {//选择实现        return position;}

3.FragmentStatePagerAdapter的实现同FragmentPagerAdapter

三个适配器之间的区别:
PagerAdapter是基类适配器是一个通用的ViewPager适配器,
相比PagerAdapter,FragmentPagerAdapter和FragmentStatePagerAdapter更专注于每一页是Fragment的情况,而这两个子类适配器使用情况也是有区别的。
FragmentPagerAdapter适用于页面比较少的情况,FragmentStatePagerAdapter适用于页面比较多的情况。

只是摘录了自己需要的部分,节选自两片大神的文章
ViewPager
FragmentPagerAdapter

原创粉丝点击