虽然文章多如牛毛,但是还是记录一下了
效果图首先已经进入了首页,每次进入页面都会有个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(); } }
GitHub:https://github.com/1024477951/FragmentApp
希望的可以收藏,^_^