阅读 2309

解决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() {
}
复制代码

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


文章分类
Android
文章标签