解决ViewPager+Fragment切换页面卡顿

 在Android开发种ViewPager和Fragment合用是很常用的一种方式,但是在切换页面的时候总会出现卡顿的情况,下面把自己解决的办法总结一下。
思路:

滑动卡顿主要的原因是因为每次切换viewpager的时候会去缓存设定的页面个数,导致每次都会有fragment里的生命周期被重新调用,一些初始化内容,网络请求等被无限调用。

解决步骤分为两步:
1、首先将viewpager的缓存个数设置为fragment的个数,也就是页面的个数。例如: viewPager.setOffscreenPageLimit(7);

这样可以在第一次创建viewpager和fragment的时候就将所有的页面都缓存,再次切换页面的时候就不会在去缓存已经被缓存的fragment页面。

2、给Fragment写懒加载,只有当前Fragment处于可视窗口的时候会被调用。

重写Fragment的setUserVisibleHint方法,adapter中的每个fragment切换的时候都会被调用,如果是切换到当前页,那么isVisibleToUser==true,否则为false。示例代码如下(在Fragment封装的基类BaseFragment中,用来被其它自定义Fragment继承,重写lazyLoad方法就可以使用):

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (isVisibleToUser) {
        isVisible =true;
       lazyLoad();
    }else {
        isVisible =false;
        onInvisible();
    }
}
复制代码

/**
* 不可见
*/
protected void onInvisible() {

}
复制代码

/**
* 延迟加载
*/
public void lazyLoad() {
}
复制代码

适当的加一些标志位,用来判断是否第一次加载,是否需要刷新页面等等,就可以解决页面卡顿的问题,只有在需要刷新的时候才去做一些耗时耗资源的操作。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值