FragmentPagerAdapter是android-support-v4支持包里面出现的一个新的适配器,继承自PagerAdapter,是专门用来给支持包中出现的ViewPager进行数据适配的。

PagerAdapter在之前的文章中进行过简单的介绍,不记得怎么使用的可以先去看一下。

FragmentPagerAdapter,见名知意,这个适配器就是用来实现Fragment在ViewPager里面进行滑动切换的,因此,如果我们想实现Fragment的左右滑动,可以选择ViewPager和FragmentPagerAdapter实现。

FragmentPagerAdapter拥有自己的缓存策略,当和ViewPager配合使用的时候,会缓存当前Fragment以及左边一个、右边一个,一共三个Fragment对象。

假如有三个Fragment,那么在ViewPager初始化之后,3个fragment都会加载完成,中间的Fragment在整个生命周期里面只会加载一次,当最左边的Fragment处于显示状态,最右边的Fragment由于超出缓存范围,会被销毁,当再次滑到中间的Fragment的时候,最右边的Fragment会被再次初始化。

在当前版本来说,最适合用来做固定的较少数量的场合,比如说一个有3个tab标签的fragment滑动界面。FragmentPagerAdapter会对我们浏览过Fragment进行缓存,保存这些界面的临时状态,这样当我们左右滑动的时候,界面切换更加的流畅。但是,这样也会增加程序占用的内存。如果应用场景是更多的Fragment,请使用FragmentStatePagerAdapter。

当我们使用FragmentPagerAdapter的时候,它的宿主ViewPager必须有一个id。

如果要使用FragmentPagerAdapter,我们需要实现2个方法,如下所示。

FragmentPagerAdapter adapter = new FragmentPagerAdapter(
        getSupportFragmentManager()) {      @Override
      public int getCount() {
        return fragments.size();
      }      @Override
      public Fragment getItem(int position) {
        return fragments.get(position);
      }
      }    };

getCount()返回的是ViewPager页面的数量,getItem()返回的是要显示的fragent对象。

除了FragmentPagerAdapter之外,还有一个类也是专门实现ViewPager的Fragment的数据适配的,叫做FragmentStatePagerAdapter。

FragmentStatePagerAdapter是PagerAdapter的子类,这个适配器对实现多个Fragment界面的滑动是非常有用的,它的工作方式和listview是非常相似的。当Fragment对用户不可见的时候,整个Fragment会被销毁,只会保存Fragment的保存状态。基于这样的特性,FragmentStatePagerAdapter比FragmentPagerAdapter更适合用于很多界面之间的转换,而且消耗更少的内存资源。

同样的,宿主VIewPager也必须有一个id。

如果要使用FragmentStatePagerAdapter,我们需要实现2个方法,getCount()返回的是ViewPager页面的数量,getItem()返回的是要显示的fragent对象。使用方法和FragmentPagerAdapter完全一样。

FragmentPagerAdapter与FragmentStatePagerAdapter使用详解与区别相关推荐

  1. ViewPager 的适配器 PagerAdapter 、FragmentPagerAdapter与FragmentStatePagerAdapter使用详解与区别

    1.FragmentPagerAdapter与FragmentStatePagerAdapter使用详解与区别

  2. Node.js中package.json中库的版本号详解(^和~区别)

    Node.js中package.json中库的版本号详解(^和~区别) 当我们查看package.json中已安装的库的时候,会发现他们的版本号之前都会加一个符号,有的是插入符号(^),有的是波浪符号 ...

  3. 【Java-Java集合】Java集合详解与区别

    [Java-Java集合]Java集合详解与区别 1)概述 2)集合框架图 2.1.总框架图 2.2.Iterable 框架图 2.3.Map 框架图 3)List 3.1.ArrayList 类继承 ...

  4. Sql Server 中 GAM、SGAM、PAM、IAM、DCM 和 BCM 的详解与区别

    Sql Server 中 GAM.SGAM.PAM.IAM.DCM 和 BCM 的详解与区别 GAM.SGAM.PAM.IAM.DCM 和 BCM 都是 SQL Server 中用来管理空间分配的一些 ...

  5. c语言运算符 amp 的意思,C++中运算符 amp;和amp;amp;、|和|| 的详解及区别

    C++中运算符 &和&&.|和|| 的详解及区别 简介: &&是逻辑与运算符,||是逻辑或运算符,都是逻辑运算符,两边只能是bool类型 &与| 既可以 ...

  6. cpu二级缓存和一级缓存详解及区别(图解)

    cpu二级缓存和一级缓存详解及区别(图解) 2012-09-02 12:27:55|  分类: 硬件技术 |字号 订阅 处理器缓存的传输速率确实很高,然而还不足以取代内存的地位,这主要是由于缓存只是内 ...

  7. Java创建comparator对象,Java Comparable 和 Comparator 的详解及区别

    Java Comparable 和 Comparator 的详解及区别 Java 中为我们提供了两种比较机制:Comparable 和 Comparator,他们之间有什么区别呢?今天来了解一下. C ...

  8. MySQL存储引擎InnoDB、MyISAM和MEMORY介绍详解和区别

    文章目录 MySQL存储引擎InnoDB.MyISAM和MEMORY介绍详解和区别 InnoDB存储引擎 特点 操作示例 创建InnoDB表 修改表引擎为InnoDB MyISAM存储引擎 特点 操作 ...

  9. mysql左连接和内连接区别_MYSQL 左连接右连接和内连接的详解及区别

    MYSQL 左连接右连接和内连接的区别,这里就对这些概念经过一个实例,讲解清楚. 代码如下: drop table table1; CREATE TABLE `andrew`.`table1` ( ` ...

最新文章

  1. 飒!阿里巴巴 29 个吊炸天的开源项目!
  2. torch.manual_seed的意义为了每次得到的随机数是固定的,为了复现实验的目的
  3. pandas 提取股票价格
  4. ubuntu20.04屏幕闪烁与分辨率的问题
  5. SAP CRM pricing read的实现逻辑
  6. php webp decode.h,HCTF两道web题目
  7. android md5使用方法,android 使用DigestUtilsmd5加密的方法
  8. C语言交换两个变量数值的几种方法
  9. 企业网站专业性诊断评价
  10. ndows phone,Windows Phone 7
  11. 人家这才叫软件测试工程师,你那只是混口饭吃(附HR面试宝典)
  12. 数据分析方法——01描述性统计
  13. Python 中paramiko模块应用
  14. mysql数据库的空间释放
  15. 如何看待人工智能技术的变革与未来?
  16. 北风网 李炎恢老师全部视频教程下载地址大全
  17. 解决pycrypto无法安装,以及爬虫实战
  18. open3d材质设置参数分析
  19. Java全栈在线教育平台
  20. 城市地下综合管廊安全运营与智慧管控的分层架构研究

热门文章

  1. java1.8 indexes_java1.8源码之ArrayList源码解读
  2. opencv_contrib编译失败解决方法
  3. GetSystemMetrics()函数的用法
  4. Redis重新连接弹性
  5. Nagios监控Windows server 2003 系统
  6. GraphQL 初探—面向未来 API 及其生态圈
  7. MIPS中的异常处理和系统调用【转】
  8. 关于升级 xcode8
  9. ios appIcon配置
  10. ASP.NET Calendar 控件