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

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

  • 相关阅读:
    一些业内有名的网站收集
    WCF重载
    FCKEditor fckconfig.js配置,添加字体和大小 附:中文字体乱码问题解决
    查询第几条到第几条的数据的SQL语句
    SPOJ 9939 Eliminate the Conflict
    UVA 10534 Wavio Sequence
    HDU 3474 Necklace
    POJ 2823 Sliding Window
    UVA 437 The Tower of Babylon
    UVA 825 Walking on the Safe Side
  • 原文地址:https://www.cnblogs.com/laughingQing/p/4801068.html
Copyright © 2011-2022 走看看