Android初级知识--ViewPager适配器:PagerAdapter和FragmentPagerAdapter的最基本使用

###概述:

  • Android开发中,几乎每一个项目都要用到ViewPager,可以说,ViewPager是和TextView控件一样的属于最基本的控件,当然viewpager的使用是要比TextView这样的控件复杂很多;
  • ViewPager的使用是要搭配适配器来使用的,而我们常用的适配器有PagerAdapter和FragmentPagerAdapter,本文只是从一个入门级别,最基本的使用来做一个示范;
    ###正文:
    ####(一)PagerAdapter的使用
  • 首先第一步是在布局文件里声明;
    activity_main.xml文件如下:



    

    


  • 其次就是在代码中使用,直接上代码;
    MainActivity.java文件如下:
public class MainActivity extends AppCompatActivity {

    private ViewPager viewPager;
    private String datas[]={"一","二","三","四","五"};   //模拟的数据

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //初始化
        viewPager = (ViewPager) findViewById(R.id.viewpager);

        //给viewpager设置适配器
        viewPager.setAdapter(new VpAdapter());
    }

    /**
     * viewPager的PagerAdapter适配器
     */
    private class VpAdapter extends PagerAdapter{
        /**
         * 返回viewpager要显示几页
         */
        @Override
        public int getCount() {
            return datas.length;
        }

        /**
         * 该函数用来判断instantiateItem(ViewGroup, int)
         * 函数所返回来的Key与一个页面视图是否是代表的同一个视图(即它俩是否是对应的,对应的表示同一个View)
         */
        @Override
        public boolean isViewFromObject(View view, Object object) {
            //几乎是固定的写法,
            return view==object;
        }

        /**
         * 返回要显示的view,即要显示的视图
         */
        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            View view= LayoutInflater.from(MainActivity.this).inflate(R.layout.item_vp,null);
            //在这里可以做相应的操作
            TextView tv= (TextView) view.findViewById(R.id.tv);
            //数据填充
            tv.setText(datas[position]);

            container.addView(view);    //这一步很重要
            return view;
        }

        /**
         * 销毁条目
         */
        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            container.removeView((View) object);
        }
    }
}
  • 适配器中用到的xml文件;
    item_vp.xml文件如下:


    

####(二)FragmentPagerAdapter适配器:

  • 使用FragmentPagerAdapter适配器其实就是将viewpager的每一页每一个条目当成了一个Fragment;
  • 同样的,首先我们现在布局文件里声明viewpager;
    activity_main.xml文件如下:



    

    

  • 其次我们要用到Fragment,所以我们先把Fragment创建出来;
    VpFragment.java文件如下:
public class VpFragment extends Fragment {
    private View view;
    private String data;    //数据

    public VpFragment() {    //无参构造人为写出来

    }

    public VpFragment(String data) {    //创建一个有参构造传递数据
        this.data = data;
    }


    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        view = LayoutInflater.from(getContext()).inflate(R.layout.item_vp, null);
        //初始化
        TextView tv = (TextView) view.findViewById(R.id.tv);
        //数据绑定
        tv.setText(data);

        return view;
    }
}
  • 上述过程中用到的xml文件;
    item_vp.xml文件如下:




  • 最后就是在代码里使用viewpager了;
    MainActivity.java文件如下:
public class MainActivity extends AppCompatActivity {

    private ViewPager viewPager;
    private String datas[] = {"一", "二", "三", "四", "五"};   //模拟的数据
    private List vpFragments=new ArrayList<>();   //碎片集合

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //初始化
        viewPager = (ViewPager) findViewById(R.id.viewpager);

        //根据数据,我们是可以知道我们要返回多少页的,所以我们就创建多少个碎片
        for(int position=0;position

###最后:

  • 以上就是viewpager的两种适配器最基本的使用,当然,还有一种FragmentStatePagerAdapter适配器,用法和FragmentPagerAdapter用法是一致的,但是有内存上的一个区别,具体的还是上网搜搜吧;
  • 关于PagerAdapter和FragmentPagerAdapter两种适配器,什么时候用?我也是在探索阶段,据我的朋友说,谷歌官方是推荐用FragmentPagerAdapter的,具体的原因因为工作太忙我还没查看,不过我根据我现在的经验来说,假如只是一些很普通的viewpager,没有冗杂的交互,那么PagerAdapter就可以,但是涉及到过多的交互,那么用FragmentPagerAdapter,因为Fragment和Activity之间能更好的彼此控制(只是目前个人片面理解);
  • 如果以上有不足之处或是错误之处,还望指教;

你可能感兴趣的:(android)