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()取出来