一对多广播,Fragment延迟加载
对于广播刷新,没看过的朋友可以先看前一篇
运用Android广播机制来通知界面刷新
Activity的onResume方法相信很多人都清楚了,在Activity回到前台的时候回调此方法,不少情况下都会在这个时机进行刷新操作,那么作为Fragment,怎么去正确地判断Fragment的刷新时机呢,就需要我们去模拟一个Fragment版本的onResume
Fragment提供的API
- onResume
- onHiddenChanged
- setUserVisibleHint….
看到这里,会发现明明API很多,为什么不能直接用?
onResume
- 此方法只要Activity回调了onResume后,会遍历回调承载的所有Fragment的onResume方法,这就造成可能Fragment并没有展示出来,但是一样回调生命周期方法,明显,不是我们想要
onHiddenChanged
onHiddenChanged是一个比较直接的方法,只要我们通过碎片管理器去show或者hide方法以后,就会回调。可以说,一般情况下只要hidden为false,该Fragment就是展示在用户前面的
当然这还远远不够,假如Fragment嵌套Fragment的情况下,假设名为a的Fragment的是名为A的Fragment一个子页面,当前a展示在前台,但是我们从A切换到B,再从B切换到A,从用户视角上来看,a从不可见重新变为可见,但是是不会回调a的onHiddenChanged方法的,说明这还远远不够
setUserVisibleHint
- ViewPager搭配Fragment相信很多人都已经炉火纯青了,tab的每一次切换,都会去调用setUserVisibleHint,将展示在前台的Fragment设置为true,未展示在前台的设置为false,显然,这个方法也是我们所需要的
梳理场景,罗列情况
- Fragment进入新的界面再返回,需要触发回调
- 搭配ViewPager切换Fragment,当某个Fragment展示在前台时,需要触发回调
- FragmentManager去管理Fragment进行hide和show,将某个Fragment展示在前台的时候需要触发回调
- Fragment嵌套Fragment,当父Fragment触发了回调了以后,也要让这个父Fragment里面展示在前台的子Fragment触发回调
先来看一下具体代码
Show Code!
(为了方便,下面的采用图片来展示代码)
- 这里定义一个mVisibleTag作为一个标志位。
- 千万注意Fragement添加到Activity以后再去判断是不是展示在前台