隆隆
Android-ViewPager2
ViewPager2
简单说就是将RecycleView再封装了⼀遍,然后协同FragmentStateAdapter将RecycleView的每个Item与Fragment绑定。
anthony weiner特性
⽀持从左到右,或者从上到下布局
shawn fanning由于适配基于的是RecyclerView.Adapter,所以内存优化也直接采⽤RecyclerView.Adapter的内存优化机制,相对于viewpager,内存优化更⾼效合理,且notifyDataSetChanged也更⾼效了。由于不⽤开发者⾃⼰实现内存和notifyDataSetChanged,也更简便了。
相⽐ViewPager,ViewPager2修复了不能关闭预加载和更新Adapter不⽣效的痛点。
⽬前ViewPager2对Fragment⽀持只能⽤FragmentStateAdapter,FragmentStateAdapter在遇到预加载时,只会创建Fragment对象,不会把Fragment真正的加⼊到布局中,所以⾃带懒加载效果。
FragmentStateAdapter不会⼀直保留Fragment实例,回收的ItemView也会移除Fragment,所以得做好Fragment重建后恢复数据的准备。
FragmentStateAdapter在遇到offscreenPageLimit>0时,处理离屏Fragment和可见Fragment没有什么区别,所以⽆法通过tUrVisibleHint判断显⽰与否。
基本⽅法
touph部分核⼼⽅法使⽤参照RecycleView和ViewPager,如设置分割线addItemDecoration(),设置当前项tCurrentItem()等。
tAdapter() 设置适配器
tOrientation() 设置布局⽅向
中日在线翻译
tCurrentItem() 设置当前Item下标
beginFakeDrag() 开始模拟拖拽
fakeDragBy() 模拟拖拽中
endFakeDrag() 模拟拖拽结束
宝宝怎么添加辅食tUrInputEnabled() 设置是否允许⽤户输⼊/触摸
tOffscreenPageLimit()设置屏幕外加载页⾯数量
registerOnPageChangeCallback() 注册页⾯改变回调
tPageTransformer() 设置页⾯滑动时的变换效果
。。。还有好多。使⽤的时候⼤家可以具体看⼀下。
offscreenPageLimit()
whip不设置它则不会预加载,⼀旦设置了,由于limit必须>0,所以会进⾏预加载limit个页⾯
maintain是什么意思limit必须>0,否则抛出异常
viewpager2的预加载在加载时已经准备好了View布局,但是没有加载到parent视图上,所以⾃带懒加载效果。 ⽽viewpager加载的时候View已经添加到parent上。所以会⾛⽣命周期的⽅法。
vsm从初始化
初始化⽅法可以看出,viewpager2⽀持的⼀些特性以及为什么。
远大前程
有没有很熟悉,就是RecycleView 重新封装的使⽤
RecyclerViewImpl
基于RecyclerView的⼆次封装,对触摸事件,初始化等进⾏封装。
LinearLayoutManagerImpl
使⽤LinearLayoutManager,所以拥有LinearLayoutManager的特性,可以垂直或者⽔平。也就引申出为什么后⾯可以设置⽔平或者垂直滑动
PageTransformerAdapter
⽤于监听pager的改变。
RecyclerView.Adapter实现基于RecyclerView.Adapter实现类似recycleView的使⽤。
基于FragmentStateAdapter实现