ViewPager内卡顿

情景

1、ViewPager丢失监听事件
2、从其他页面切换到含有ViewPager的页面卡顿

解决

一、ViewPager丢失监听事件

项目中实际情况:从其他View跳转到ViewPager,丢失一次ViewPager监听事件。
原因分析:ViewPager内有个mFirstLayout参数,
解决方式:给ViewPager添加 监听

        viewPager.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {
            @Override
            public void onViewAttachedToWindow(View v) {
                v.requestLayout();
            }

            @Override
            public void onViewDetachedFromWindow(View v) {

            }
        });
重新请求 layout就可以解决,这个BUG只发现在华为手机上有。


二、从其他页面切换到含有ViewPager的页面卡顿

项目实际情况:项目中ViewPager 内View 形式为  ScrollView 嵌套 ExpandableListView。
卡顿原因分析:
1、ViewPager 重新请求布局
2、ViewPager 缓存
3、ExpandableListView getGruopView 和 getChildView 耗时
1 和 2都不是主要问题。
解决办法:

1、ViewPager 切换到其他View 时,将ViewPager 内 各page setVisiable GONE
2、对ExpandableList,在ViewPager切换出去时,记录group的展开或折叠状态。
3、记录 scrollView 的 Y值
4、在其他View 切换到ViewPager时,通过 handler,执行-- 恢复ExpandableListView状态 -- 恢复 scrollView Y轴 -- 当前 page setVisiable Visiable
显示结果:其他View进入Viewpager,先显示空白,再显示具体内容。解决了切换到ViewPager时的卡顿问题。

总结:主要思路

1、ExpandableListView,如果折叠,这时候就不会执行 getChildView 省时。
2、Pager 执行 GONE 的主要意义在于 不要让用户看到 折叠 -- 展开 -- scrollTo Y的动作。一切动作做完后,在Visiable








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值