最近的身体过敏了,很不舒服,所以一直在调整状态,所以谅解一下,最近有看到有人问怎么实现Fragment的懒加载,然后我之前也看过大神写过的LazyFragment,其实也挺好的,但是我在做项目的时候,要做到懒加载并没有使用到LazyFragment,而是重写一个方法,这个方法类似懒加载,反正好用到不行,其实懒加载无非就是判断这个Fragment是否是展示出来的,如果是第一次展示出来,那么就要加载数据,然后加载了之后,数据在不需要刷新的状态其实都是不用重新访问的,所以我们首先在Fragment中重写什么方法呢?其实就是这个:
public void onHiddenChanged(boolean hidden) {
}
看名字估计都知道什么意思啦,就是当隐藏状态改变之后的方法,每一次改变Fragment显示的状态都会调用一次这个方法,当然,还有一开始初始化这个Fragment的时候也会调用一次,所以我们把数据放在这里去加载也可以做成懒加载的效果啦,但是我们要主要,要加一个标识,是否是初次加载的标识,因为Fragment加载了数据之后,没有标识的话,重新显示还是会重新加载一次的,所以要注意啦,我们可以在Fragment隐藏的时候去做一些保存数据的操作,然后显示展示出来(ps:不保存,界面显示出来,数据还是完整的,不用担心),而且必须使用show()和hide()这两个方法切换,不然这个回调是不会触发的,要注意咯,然后还有一个弊端,就是第一个加载出来的页面是肯定不会调用这个方法的,后面没有加载出来的都会触发一次回调,所以这个使用有限制性,但是如果需求合适,那么不用重写Fragment那就剩下很多时间了,下面看看源码吧,毕竟还是要走一下源码的
/**
* Called when the hidden state (as returned by {@link #isHidden()} of
* the fragment has changed. Fragments start out not hidden; this will
* be called whenever the fragment changes state from that.
* @param hidden True if the fragment is now hidden, false otherwise.
*/
public void onHiddenChanged(boolean hidden) {
}
看介绍就知道这个是当fragment hidden状态改变之后调用的,而且源码说的很明白了,Framgents start out not hidden,意思是Fragment一开始不是隐藏的,this will be called whenever the fragment changes state from that,意思这是所有fragment改变状态的开始,很明白了吧,简单来说就是一开始Fragment是显示的,不会调用这个方法,然后当fragment状态改变的时候才开始调用这个方法,例如使用了hide()方法
我们平时可能会用到isHidden()这个方法去判断Fragment是否显示,其实这个方法的参数hidden就是isHidden返回的值啦,今天就说这么多吧,我继续休息去了