思路:

滑动卡顿主要的原因是因为每次切换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() {

}

复制代码

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

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐