上次留下了两个问题
1.在跳转到其他页面回来时,会怎么样?
2.在子Fragment中又有一个viewpager+Fragment又会怎么样?
问题1
并不会怎样,只是回来的时候不会去分发加载数据的事件而已啧
所以我加上这样一段代码,用一个变量去判断,不需要可以不写,但是我想想你跳转了别的页面,回来数据Fragment数据应该会变,所以分发一下
image.png
问题2
这里去除掉了其他log,为了看起来清楚点
我给TowFragment加了一个viewpager,里面有TowFragment1和2
进入App可以看到,爹都还没显示,儿子先加载了数据?
image.png
而且在之后的切换底部Tab,TowFragment里面的两个儿子都无动于衷,只有刚打开App时加载了,连停止加载的方法都没调用到,根本就没有事件分发到儿子那里去
image.png
所以我们必须要再做一些根据父亲和儿子的状态再做一些判断
先解决第一个问题,父Fragment还没显示,子Fragment就加载了数据。这个问题很简单,我们只需要在分发加载数据的事件时,判断一下是否有父Fragment,且是否可见。
就可以了
根据Fragment源码中的这个方法,可以解决上面的问题
image.png
比如,父Fragment不可见时直接退出方法,不准分发
image.png
但是还有一个问题存在,就是不管怎么切换,子Fragment都不会分发加载或停止加载数据的事件。这是为啥??
从一开始我们可以看到,在进入HomeFragment时,子Fragment也会分别调用两次setUserVisibleHint方法
,在进入前就把自己的可见状态置为true。到底后面的分发事件无效了。
所以我决定在进入他的父Fragment时,再去调用一次分发事件,真正的加载子Fragment的数据,比如
image.png
可以看见切换都是正常的
image.png
最后到这里
这个懒加载的写作思路就这样结束了~ 接下来就是加上SmartRefresh控件去模仿微博的加载模式了(当然只能简陋的模仿)
网友评论