zoukankan      html  css  js  c++  java
  • [转][Android]FragmentPagerAdapter与FragmentStatePagerAdapter使用详解与区别

    原文链接:http://blog.csdn.net/zhaokaiqiang1992

        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个方法,如下所示。

    [java] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. FragmentPagerAdapter adapter = new FragmentPagerAdapter(  
    2.                 getSupportFragmentManager()) {  
    3.   
    4.             @Override  
    5.             public int getCount() {  
    6.                 return fragments.size();  
    7.             }  
    8.   
    9.             @Override  
    10.             public Fragment getItem(int position) {  
    11.                 return fragments.get(position);  
    12.             }  
    13.             }  
    14.   
    15.         };  

        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完全一样。

  • 相关阅读:
    [daily][troubleshoot][archlinux][wps][font] wps文档中的图内容无法显示中文
    [troubleshoot][daily][archlinux][pacman] pacman 与 pip 包文件冲突
    [daily] 宇宙终极shell之zsh
    [knowledge][basic][hardware] 内存的硬件结构(转)
    [troubleshoot][archlinux][X] GPU HANG
    [daily]使用rdtsc指令,测量程序的运行速度 [转]
    [have_fun] 好玩哒小游戏又来啦
    [dpdk] 读开发指南(2)(内容长期整理中)
    [Virtualization][SDN] 讲的很好的SDN软件定义网络视频课程
    [Virtualization][SDN] VXLAN到底是什么 [转]
  • 原文地址:https://www.cnblogs.com/ryq2014/p/5366929.html
Copyright © 2011-2022 走看看