00:00
啊,这个呢,我们就写完了,这个还可以啊,这个不算太难,那关键的就是下边这个叫loading page。啊,这个呢就有点难了啊,哎,我们看下这个是要干什么啊,哎,首先呢,我们先提到这个叫抽取的一个动机。嗯,这个时候我们要抽取什么,或者要把什么样的操作给它抽取出来,这时候呢,我们涉及到这样的一个需求啊,或者我看看我们这个也可以啊。来看我们已经这个在这里边写好了这个。啊,大家想啊,我们这里边儿呢,有好几个fragment,这是一个,这里面这几个都是。啊,假设这几个呢,都需要联网。啊,你看我们这里边儿有一个这样的正在加载的一个操作啊,都需要联网的话呢,那我们就都需要去获取数据,在整个获取的过程当中,我们说呢,有可能失败,也有可能成功。啊,包括呢,像这个正在加载,这也算是一种状态。啊,那我们就单独以这个home fragment为例。
01:01
就以它为例的话呢,我们想一想啊,这个home fragment,它大概会有几种呈现不同的页面效果。哎,首先你看这是不是就一种,这属于你这个正在加载的啊,这算是一种了啊啊还有。啊,这是加载的,然后我们成功是不是也算是一种啊。哎,刚才同学说说失败了,就是相当于我联网机构,最后呢,可以获取到数据。嗯嗯,还有吗?好像我们想到的差不多也就这几种是吧,哎说这哎还有一种你可以理解成就是加载成功了,但是返回这个数据呢,没有。啊,或者我没有找到我们这个页面中想要的数据,那这个概率比较小,但是也算是一种情况啊,整体来看的话呢,大体上就分成这四种情况。那行了啊,首先呢,我们光说针对这一个fragment来说。啊,它就有可能呈现这四种状态,而且这四种状态是不可能是叠加显示的。
02:04
你说这四个叠加到一起,那肯定不对,那一定是先,比如说我们这时候正在加载显示的是这个算式一了啊,那我们加载的过程当中,实际上呢,就已经开始联网去获取数据了。那一旦发现获取到了。他是不是就没有了,他没有了那就改成成功的了。啊,就显示成它了,行,这是一种情况,那有可能呢,加载完发现这个失败了,那就是呃,把它呢干掉,然后显示的是它,那还有可能呢,就是下载完成功了,既然没有数据,那就显示它,那就是说这几种情况呢,是都有可能呈现在这个界面当中的。那我们应该怎么去设置这个界面呢?嗯,那这里边儿可能我们比较朴素的一种想法,就是我把这四种布局啊,我都全部怼到你这个fragment,你所对应的那个布局文件当中。啊,就是让咱们先都层叠的显示啊,混到一起层叠显示,然后的话呢,呃,你是哪一种情况,我就让谁呢visible。
03:09
剩下三个呢,就invisible。对吧?啊,或者说你三个就全invisible,然后一上来也被全,就是初始化的时候先上它是visible的,其他三个全杠也好,Invisible也好。呃,然后呢,你发现诶一联网哎数据成功了,行,那我就让这个呢,Visible,其他的呢,全都invisible或者全都杠掉。啊,然后呢,又失败了,那我就让那个再让那个。是不是这样一种想法?可以做吧,这样。可以做的没问题哈,但是这个时候呢,你自己设计的时候呢,就比较恶心了是吧,你这个界面里边那个画起来就非常的复杂了哈,就实际上是看到有四套,而且是层叠在一起的,那你肯定我们就考虑用那个啊是吧。当然这相对布局我们就先考,主要用这个可能更合适一些,再层叠思考。
04:00
啊,那你行,这是其中一套了啊,那我这个投资页是不是也也要有这四种情况呀,这也得写这四套。然后这个是不是也也要联网四套是吧,然后再再多一点就又有四套啊行,那你像一个京东,京东的话呢,我随便整个链接一点开四套是吧?啊那就哭了啊,所以这样写法的话呢,这个冗余太大。啊,况且你在一个页面中怼这四套,就这一套就已经够痛苦了啊,怼四套,怼怼很多套,每个链接都整四套,那就哭了。啊,这个你要看代码量,给工资的话那可以。嗯,主要不是这样给工资的啊,所以呢,我们就就得想办法说我得这个优化优化啊,那优化的话呢,我们就可以怎么办呢?呃,你这儿呢,不就是四个具体的页面显示效果嘛,我就把这四个呢,专门把它哎封装成一个类。呃,实际上这个类呢,就是我们这里边儿loading配置这个类。
05:00
哎,我放到这个类里边啊,哎,放到这个类里边呢,也就是说这个类说白了哈,这个loading配置呢,看着感觉看不出来它是什么,实际上它就是一个frame,也就是说我们让他呢去继承于free啊,在这里边我就是写这四个。啊,具体的这样的四个布局。啊,怎么去写,你看你要怼到一起不好看,你看我怎么写的啊,哎,写完这四个以后的话呢。呃,我们具体这个里边要用了哈,这里边儿可能会用,这里边儿也可能会用,这边也同样的道理。啊,那此时既然我们所有跟联网相关的这个页面都可能会用它,那不妨把这个loading配置,我是不是就声明在base fragment当中?呃,因为大家都会用嘛,哎,所以呢,我们就在贝frag当中去用一下它。啊,而用的时候呢,因为不同的页面,实际上啊,我们在加载的时候呢。啊,换个颜色,加载中加载失败,加载成功了,但是没有数据,这三个页面不管你是哪一个啊,是不是都可以做成一样的呀,关键区别呢,是不是就是加载成功的时候,各个页面显示的东西不一样了。
06:12
啊,包括呢,你下载的数据呢,也不一样了啊,所以说呢,针对于你不同的联网页面,他们呢,都有这四种状态好统一的,然后四种状态里边发现其中有三种的页面都可以做成一样的。那只有一个不一样,那就是只有它不一样,那就意味着我们在使用的时候呢,我只把这个不一样的是不是暴露出去,做成一个抽象的方法,哎,然后呢,让你具体这个页面呢,去重写这个方法是吧,重写这个方法两方面哈,一方面呢,就是提供你自己的布局。实际上我们刚才已经在这个base fragment里边已经做这个事情了,每个fragment都已经写了自己的布局了。啊,那另外一方面呢,就是我们联网的时候呢,这个操作呢,你想每个页面既然都需要联网。既然都需要联网,那就再写到一起呗。写起写哪呢,比如我写这儿啊,写这其实你也可以写到这儿嘛,呃,因为呢,联网成功的这块成功与否,你不得看联网成功与否嘛,所以这个联网操作呢,也写到这里边,那也写到这里边,就意味着你的这个数据呢,下载过来的也应该是不是先放到这个loading配置里了。
07:17
那loading配置是不是得想办法把这个数据给它传出来,给我们具体的这个页面呀。看这就是第二个问题啊,第一个问题就是几个fragment提供你各自的布局,这个我们其实上已经做了啊,第二个呢,就是哎。把loading配置当中联网下载的数据传递到我们各自的flag当中啊,然后呢,就是根据你这个布局呢,装一下数据显示。这是我们这个里边的一个难点。啊,首先呢,大家先去理解一下我们为什么要造这个楼顶配置啊,关于它的一个理解啊,这呢,我们就提到这样的一个动机。啊说任何一个联网的VIVO呢,都有这样的四种页面的一个展示。正在加载,加载失败,加载成功但没数据,加载成功有数据,这个呢,当然是我们最希望它返回的啊,那这个呢,是我截了一张这个京东的一个图啊,京东呢,这不就这样的去像嘛,首页如果把网一关,它就报的这个,其他这个页面一样,你只要你官网了,他连找不着网,它就会报这个。
08:18
啊,他也是这样做的啊。啊,这里边儿呢,我们就提到了,要抽取一个公共的view的界面类,就叫loading配置。行,先把这个为什么有它说清楚。
我来说两句