一对多广播,Fragment延迟加载

来源:互联网 发布:去哪里买淘宝店铺 编辑:程序博客网 时间:2024/06/05 18:39

对于广播刷新,没看过的朋友可以先看前一篇
运用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以后再去判断是不是展示在前台