前言

tab选项、底部或者顶部的导航栏、菜单栏 点击时都需要去切换fragment页面,可以有以下实现方式:
- 可以使用FrameLayout控件手动切换(不可滑动,滑动需单独实现)
- 使用viewpage2自动切换(可以滑动)
一、问题
ViewPage2是Jetpack中的其中一个组件,可以实现滑动切换页面的效果,通常可以搭配其他组件实现滑动切换效果。ViewPager2是基于RecyclerView实现的,自然继承了RecyclerView的众多优点,并且针对ViewPager存在的问题做了优化。可以使用offscreenPageLimi属性来预先加载页面,也可设置为0实现懒加载(页面显示时再加载)。

但是在实际开发中遇到一个问题:
ViewPager2下多个fragment的页面高度可能是不同的,在允许预加载的条件下ViewPager2的高度会始终跟随最高的那个fragment的高度,导致其他比较低的fragment页面出现留白的问题。即便禁止了预加载,也不能解决。
二、解决
1. ViewPage2添加配置
如果要实现ViewPage2的高度始终和当前的fragment保持一致,那么就需要在每一次点击tab的时候重新计算当前fragment的高度并将高度设置给ViewPage2。
vp2_frag是ViewPage2控件,fragmentList是所有fragment的集合
private val fragmentList = arrayListOf<Fragment>()
......
//viewPager初始化以及切换tab的时候都会触发这个监听,不管是否禁止了预加载都不会有影响
vp2_frag.viewTreeObserver.addOnGlobalLayoutListener {
if

最低0.47元/天 解锁文章
907

被折叠的 条评论
为什么被折叠?



