android开发知识点

Fragment 实现懒加载

2019-07-24  本文已影响0人  八分半

一、懒加载的目的

ViewPager 嵌套Fragment中,ViewPager会自动实现预加载,在 Fragment创建过程中都会执行默认网络请求,无论Fragment是否对用户可见,显然有些浪费流量、影响性 App 性能、用户体验不佳等缺点。为解决上述问题,需实现Fragment仅在用户可见的状态下加载网络数据。

二、懒加载实现方案

Fragment有一个非生命周期的setUserVisibleHint(boolean isVisibleToUser)回调方法,当 ViewPager嵌套 Fragment 时会起作用,如果切换 ViewPager 则该方法也会被调用,参数isVisibleToUsertrue代表当前 Fragment 对用户可见,否则不可见。
setUserVisibleHint(boolean isVisibleToUser)Fragment创建之初会回调一次isVisibleToUser的值为false,在Fragment创建之后用户可见时再回调一次,此时isVisibleToUser的值为true
根据setUserVisibleHint(boolean isVisibleToUser)这个回调方法的特性,我们可以实现Fragment的懒加载。
1.在BaseFragment中添加变量

private boolean isViewCreated; // 界面是否已创建完成
private boolean isVisibleToUser; // 是否对用户可见
private boolean isDataLoaded = false; // 数据是否已请求

2.重载setUserVisibleHint(boolean isVisibleToUser)回调方法,创建lazyLoad()方法,在Fragment创建之后、用户可见、第一次加载时调用lazyLoadDate()方法

 @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        this.isVisibleToUser = isVisibleToUser;
        lazyLoad();
    }

    private void lazyLoad(){
        if(isViewCreated && isVisibleToUser && !isDataLoaded){
            isDataLoaded = true;
            lazyLoadDate();
        }
    }

    /**
     * 懒加载
     * 在此加载网络数据
     */
    public void lazyLoadDate(){

    }

3.重载onActivityCreated

@Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        isViewCreated = true;
        lazyLoad();

    }

三、使用方法

继承BaseFragment,并且重载lazyLoadDate(),在lazyLoadDate()加载网络数据即可。

上一篇下一篇

猜你喜欢

热点阅读