android ViewPager的优化 - gmtalang/test GitHub Wiki

  • 首先ViewPager是一个容器

1.适配器的优化(针对缓存)

  • ViewPager里面套fragment的时候,fragment默认是在内存缓存中,所以个数是有限的
  • 对于这种我们用的适配器是FragmentPagerAdapter
  • 对于fragment动态数据很多的时候,我们的适配器用的是FragementStatePagerAdapter

2.3.0之后实现了动画效果(很好看,官方的)

  • 用属性动画解决的官方有个动画案例ViewPager.PageTransformer接口需要我们去实现

  • public interface PageTransformer{

  • void transformPage(View page,float position);
    
  • }

  • View page :这个当然就是我们在ViewPager中滑动的界面。

  • float position :这个参数是个重点,我们必须好好理解,请注意这个参数是一个float类型,而不是平常我们所理解的int位置。

  • 当position=-1时,表示当前页的前一页,此时该页面是看不见的

  • 当position= 0时,表示当前页,当前显示页

  • 当position=1时,表示当前页的下一页

  • position取值为 [-Infinity,-1) -> 页面不可见

  • position取值为(1,+Infinity] -> 页面不可见

  • position取值为[-1,1] -> 于可见状态区间

* 3.fragment的懒加载(视图可见与否的情况的问题)

  • 由于ViewPager默认加载2个fragment,为了降低内存,在视图可见的时候再去加载网络的东西
  • 我们可以经过测试发现setUserVisibleHint的调用要优先于onCreate()
  • onStart()里面我们调用getUserVisibleHint()来判断是否可见然后去加载(这种方式用于UI更新)
  • setUserVisibleHint()里面操作的时候(适用于没有进行UI更新)

4.在Viewpager中Fragment生命周期的管理

  • viewpager显示fragment的时候不会仅仅显示展现的那个fragment,而是将前一个,后一个,和正在显示的fragment的生命周期都跑一遍
  • 通过setArgument(Bundle)往Fragment里面加上数据,然后fragment通过getArgument()取出来