一、效果展示

二、前期准备

1.给需要使用ViewPager的活动的布局中添加ViewPager控件

2.为你的ViewPager创建页面布局

这里我们创建3个背景色不同的布局

三、在java代码中实现ViewPager

1)全局声明

    private ViewPager viewPager;//ViewPager的三个视图private View view1, view2, view3;//用于存放视图的集合private List<View> viewList;

2)初始化控件

    private void initView() {viewPager = findViewById(R.id.viewpager);/** 视图的初始化需要使用(布局扩充器LayoutInflater)来加载布局资源进行初始化* 主要方法:* 1.getLayoutInflater() 获取布局扩充器* 2.inflater.inflate(布局资源,null)* */LayoutInflater inflater = getLayoutInflater();view1 = inflater.inflate(R.layout.viewpager_content1,null);view2 = inflater.inflate(R.layout.viewpager_content2,null);view3 = inflater.inflate(R.layout.viewpager_content3,null);viewList = new ArrayList<>();//把视图添加到一个视图集合里面方便管理!viewList.add(view1);viewList.add(view2);viewList.add(view3);/** 页面适配器,必须重写4个方法* 1.getCount 设置页面数* 2.destroyItem 摧毁页面* 3.instantiateItem * 4.isViewFromObject     * ** */PagerAdapter pagerAdapter = new PagerAdapter() {//设置viewPager的页数@Overridepublic int getCount() {return viewList.size();}//删除container中指定下标的视图@Overridepublic void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {container.removeView(viewList.get(position));}//实例化ViewPager中的页面@NonNull@Overridepublic Object instantiateItem(@NonNull ViewGroup container, int position) {//添加当前下标的视图到ViewPager容器内,这里的position就相当于视图的下标(滑动页面的时候会变化)container.addView(viewList.get(position));//返回当前视图return viewList.get(position);}//目前不做详解,这里先这样写就行——>返回两个参数判等结果@Overridepublic boolean isViewFromObject(@NonNull View view, @NonNull Object object) {return view == object;}};//给viewPager设置好适配器viewPager.setAdapter(pagerAdapter);}

注意

  1. view视图的初始化要通过inflater.inflate()
  2. 创建PagerAdapter必须重写4个方法(后面会详细介绍!)

四、介绍PagerAdapter必须重写的四个方法

  • getCount()
  • destroyItem(ViewGroup, int, Object)
  • instantiateItem(ViewGroup, int)
  • isViewFromObject(View, Object)

1.前情须知
ViewPager中的每一个滑动页面都有其对应的Key,这个Key值是用来追踪ViewPager中的这个界面的,Key是Object,只要任何能唯一表示该页面的任何数据都可以是Key,比如:这个页面对象本身可以作为自己的Key,这个页面position(下面有介绍)也可以作为自己的Key。

2.getCount()方法

            //设置viewPager的页数@Overridepublic int getCount() {return viewList.size();}

作用:在PagerAdapter中设置ViewPager的滑动页数

3.destroyItem(ViewGroup, int, Object)方法

            //删除container中指定下标的视图@Overridepublic void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {container.removeView(viewList.get(position));}

作用:删除container中给定position的视图(这里的postion可以理解为滑动页面对应的Key)

4.instantiateItem(ViewGroup, int)方法

            //实例化ViewPager中的页面@NonNull@Overridepublic Object instantiateItem(@NonNull ViewGroup container, int position) {//添加当前下标的视图到ViewPager容器内,这里的position就相当于视图的下标(滑动页面的时候会变化)container.addView(viewList.get(position));//返回值:这里用view自身当作自己的Key,不一定必须返回viewList.get(position),返回其position也可以作为其Key,但相应的下一个方法需要改动return viewList.get(position);}

作用:在container的指定位置添加新的视图,并返回该视图的Key

5.isViewFromObject(View, Object)方法

         //参数1:视图//参数2:视图的Key@Overridepublic boolean isViewFromObject(@NonNull View view, @NonNull Object object) {return view == object;}

作用:判断传入的view是否与传入的Key相匹配

五、收获

  1. 使用布局文件实例化View视图的方法是View view = inflater.inflate(布局资源,null)
  2. 建立一个ViewPager的大致流程:

1.为ViewPager准备几个用来滑动的布局视图
2.初始化控件后,把视图放进一个集合中
3.建立页面适配器(PagerAdapter),重写4个方法
4.为ViewPager设置适配器(setAdapter)

  1. 重写适配器四个方法的要点:

1.getCount() 方法 要求返回需要设置的页面数量
2.destroyItem()方法 需要container移除指定position的view
3.instantiateItem()方法 需要container添加指定position的view,然后返回页面的Key
4.isViewFromObject()方法 返回view是否匹配Key

ViewPager——基础知识和PagerAdapter必须重写的四个方法相关推荐

  1. js基础知识温习:Javascript中如何模拟私有方法

    本文涉及的主题虽然很基础,在很多人眼里属于小伎俩,但在JavaScript基础知识中属于一个综合性的话题.这里会涉及到对象属性的封装.原型.构造函数.闭包以及立即执行表达式等知识. 公有方法 公有方法 ...

  2. 【深度学习基础知识 - 25】提升模型泛化能力的方法

    提升模型泛化能力的方法 从数据角度上来说.可以通过数据增强.扩充训练集等方法提高泛化能力. 在训练策略上,可以增加每个batch size的大小,进而让模型每次迭代时见到更多数据,防止过拟合. 调整数 ...

  3. 免费计算机操作基础知识ppt,计算机基础知识:PPT常用操作(四)

    [导语]在事业单位考试中,计算机专业知识的复习向来是考生复习备考阶段的一大重点,其中中公事业单位考试网为计算机基础知识的复习为考生提供知识点梳理,帮助考生备考! 一.PPT编辑放映两不误 按住Ctrl ...

  4. 计算机word基础知识ppt,计算机基础知识:PPT常用操作(四)

    [导语]在事业单位考试中,计算机专业知识的复习向来是考生复习备考阶段的一大重点,其中中公事业单位考试网为计算机基础知识的复习为考生提供知识点梳理,帮助考生备考! 一.PPT编辑放映两不误 按住Ctrl ...

  5. 【深度学习基础知识 - 21】加快模型训练速度的方法

    在深度学习任务中,虽然可以通过堆叠参数.设计更复杂的结构来提高模型的表征能力,但这也会导致模型的计算量增加,训练时间延长,大大降低模型的产出效率.这篇文章根据博主的经验简单介绍一些加快模型训练速度的方 ...

  6. 方法的重载与重写_java基础知识之重载和重写

    重载(Overloading)和重写(Overriding)是Java中两个比较重要的概念 重载 简单说,就是函数或者方法有同样的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间, ...

  7. python正则表达式使用实例_正则表达式的基础知识,以及Python爬虫中的使用方法...

    一.正则表达式 实际上爬虫一共就四个主要步骤: 明确目标(要知道你准备在哪个范围或者网站去搜索) 爬(将所有的网站内容全部爬下来) 取(去掉对我们没有用处的数据) 处理数据 我们在第上一篇文章中介绍的 ...

  8. Java基础知识强化83:System类之gc()方法(垃圾回收)以及和finalize()区别

    1. System概述: System类包含一些有用的类字段和方法.它不能被实例化. 2. gc()方法:垃圾回收器 1 public static void gc()       调用gc方法暗示着 ...

  9. 【计算机网络】计算机网络基础知识(三次握手,四次挥手,OSI七层网络模型)

    目录 一.计算机网络的定义 1.计算机网络的正式定义 2.计算机网络的分类 3.网络性能参数 二. 计算机网络协议(核心) 1.网络协议的正式定义 2.网络层次划分 「四层网络协议的作用」 TCP/I ...

最新文章

  1. 构造函数未定义_构造函数(constructor)和观察者模式,谁略胜一筹呢?
  2. 后台服务系统之什么是dubbo
  3. SQL CE 3.0 与SQL CE 3.5区别
  4. 也说翟鸿燊忽悠的一面
  5. C语言数据类型转换(自动类型转换 强制类型转换)
  6. OSChina 周四乱弹 ——妹子喜欢的是程序员 这是标准……
  7. Python 进程互斥锁 Lock - Python零基础入门教程
  8. 路由器DHCP和DHCP中继的配置
  9. 让自定义view宽高成比例显示
  10. linux云自动化运维基础知识4(系统结构,vim,管理输入输出,正则表达式)
  11. asp.net web.config配置节说明
  12. PS把一张白纸里的黑色图形抠出来
  13. 魔乐手机管家V2.0内测版惊艳亮相--Android软件
  14. VPX加固机箱学习资料第289篇:基于3U VPX的 5槽加固机箱
  15. Python:计算KDJ指标
  16. python化学公式配平_如何用矩阵知识配平化学方程式?
  17. 【沃顿商学院学习笔记】宏观经济学——05中产阶级Middle Class
  18. mysql连接泄露 定位_数据库连接泄露一例
  19. unity2D学习笔记-角色动画
  20. 山西民生云大同员认证在什么网_山西民生云app下载-山西民生云大同app认证下载手机版 v2.2-91优手机网...

热门文章

  1. 20165115 2017-2018-2 《Java程序设计》第六周学习总结
  2. docker网络基础配置
  3. CoreData之增删改查
  4. [转]Microsoft SQL Server 2005 整合、集成SP3方法
  5. zz详细讲解Quartz.NET
  6. CYQ.Data 轻量数据层之路 V3.0版本发布-Xml绝对杀手(三十二)
  7. 精通javascript、javascript语言精粹读书笔记
  8. Linux运维问题解决(1)——Linux 定时任务 crontab 配置及示例
  9. Linux操作Oracle(16)——Oracle扩容报错:ORA-01144_表空间数据文件超出最大限制
  10. 现代人必须掌握的成功学方法