Android中最常用的适配器:PagerAdapter与FragmentPagerAdapter

PagerAdapter与FragmentPagerAdapter


PagerAdapter

官方对于PageAapter的描述:Base class providing the adapter to populate pages inside of a ViewPager. You will most likely want to use a more specific implementation of this, such as FragmentPagerAdapter or FragmentStatePagerAdapter。

而ViewPager。它是google SDk中自带的一个附加包(v4)的一个类,可以用来实现屏幕间的切换。
注意:ViewPager是 v4包中的,所以在布局中使用时,需要写全
android.support.v4.view.ViewPager

PagerAdapter就是ViewPager提供的一个适配器。

  • 使用步骤
    1.创建一个class,继承自PagerAdapter
    2.该Adapter用来适配Viewpage
    3.需要重写4个方法
    a.getCount(),告诉ViewPager,有多少个View要显示
    b.instantiateItem(),该方法两个作用:一、把要被显示的视图加载ViewGroup,二、返回要加载的View
    c.isViewFromObject(),用来判断instantiateItem返回的Object与当前的View是否是同一对象
    d.destroyItem(),该方法在View被移除时调用

代码如下

class MyPageAdapter extends PagerAdapter {
        /*
         * 告诉ViewPager,有多少个View要显示
         */
        @Override
        public int getCount() {
            return views.length;
        }
        /*
         * 该方法两个作用:一、把要被显示的视图加载到ViewGroup,二、返回要加载的View
         * 
         * 两个参数:
         * 
         * 参数一:ViewGroup:被加载的View的父布局
         * 
         * 参数二:position:要加载的View在数组或集合中的位置
         */
        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            // 1.加载View到container
            container.addView(views[position]);
            // 2.返回被加载的视图
            return views[position];
        }
        /*
         * 用来判断instantiateItem返回的Object与当前的View是否是同一对象
         */

        @Override
        public boolean isViewFromObject(View view, Object object) {
            // TODO Auto-generated method stub
            return view==object;
        }

        /*
         * 该方法在View被移除时调用
         * 
         * 移除对应的View
         * 
         * 三个参数:
         * 
         * 参数一:container:要被移除的View的父布局
         * 
         * 参数二:position:表示要被移除的View在数组或集合中的位置
         * 
         * 参数三:Object:代表的就是要被移除的对象
         */
        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            // 不要保留super语句,否则报错:没重写desoryItem
            // super.destroyItem(container, position, object);
            // 移除指定的View
            // container.removeView(views[position]);
            container.removeView((View) object);
        }
    }

FragmentPagerAdapter

FragmentPagerAdapter一般用来处理多 Fragment 页面的横向滑动。

  • 使用步骤

    1.创建一个class,继承自FragmentPagerAdapter
    2.该Adapter用来适配Fragment与Viewpage
    3.重写3个函数,重写构造方法,getItem,getCount

代码如下

public class MyFragmentPageAdapter extends FragmentPagerAdapter {
    //需要的数据
    List<Fragment> data;

    public MyFragmentPageAdapter(FragmentManager fm, List<Fragment> list) {
        super(fm);
        this.data = list;
    }
//返回要加载的Fragemnt
    @Override
    public Fragment getItem(int position) {
        return data.get(position);
    }

    @Override
    public int getCount() {
        return data.size();
    }
}
原文地址:https://www.cnblogs.com/cxyquan/p/9746604.html