虽然文章多如牛毛,但是还是记录一下了

效果图首先已经进入了首页,每次进入页面都会有个toast弹出提示,当点击第二个菜单,toast弹出,在次点击第一个菜单,因为已经加载过了,所以不弹出,在次点击第二个菜单,同理,在点击第三个菜单,第一次点击,弹出

实现也比较简单

首先继承自己的base类

定义三个变量,是否加载好:isPrepared 是否显示:isVisible 是否加载完:isLoad

然后在相应的位置改变变量的状态

    

然后实现你的base中的方法,在init方法里添加toast,运行看看是否会多次加载

 

运行后你或许会发现第一次默认进入页面的fragment没有被调用方法,这显然不是我们希望的,所以还得在加一段代码,让默认加载的fragment也应该被调用,并且只调用一次。只需要如下图调用上面定义的显示方法就可以了

在次运行,发现和上面的效果图一样的效果了,这里懒加载就全部完成

public abstract class LazyFragment extends BaseFragment {

    protected boolean isLoad = false;//是否加载完

    protected EmptyLayout emptyLayout;

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        onVisible();
    }

    /**
     * 在这里实现Fragment数据的缓加载.
     */
    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if(getUserVisibleHint()) {
            isVisible = true;
            onVisible();
        } else {
            isVisible = false;
        }
    }
    /**可见时调用*/
    protected void onVisible(){
        if(!isPrepared || !isVisible || isLoad) {
            return;
        }
        init();
        isLoad = true;//加载完后更改状态,只限定加载一次
        Log.e("tag","onVisible");
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
    }
}
View Code

 

 GitHub:https://github.com/1024477951/FragmentApp

 希望的可以收藏,^_^

 

posted on 2017-12-28 14:51  翻滚的咸鱼  阅读(383)  评论(0编辑  收藏  举报