Menu Close

第五课 完成新闻数据加载(修改)

在前面将框架搭建完毕后,就能够正式起头写界面逻辑了。说到写界面,其实把框架搭建完后,剩下的都只是苦力活,没太多的手艺含量。那么我们就起头剩下的课程吧!

在我们的使用中利用 tablayout + ViewPager + fragment 来呈现多标签页面,那么就会呈现一个问题, viewpager 有预加载的功能,一般会加载 4 个所有的fragment ,也就是说,若是在 fragment 初始化的时候请求收集,那么就会同时有 4 个页面城市请求,可是用户只想查看 1 个页面,这就会形成流量的华侈,当然啦,此刻处于 4G 向 5G 进发的时代,相信用户也不在乎。可是作为开辟而言仍是要考虑到此时的效率问题。

基于以上问题,我们需要在当前 fragment 显示的时候加载数据,页面不显示的时候就不加载数据,同时也要避免页面来回切换时反复加载收集,那么需要怎样处理呢?谜底在 fragment 本身。

然而还有个问题,若是按照上面的代码第一次进入页面之后setUserVisibleHint先被挪用,这时视图还没有完成建立,所以数据加载操作不会被挪用。。而之后没有切换页面,Fragment的可见性也就不会发生改变了,setUserVisibleHint也就不会被挪用了,

这种界面的实现一般用 tablayout + viewpager 来实现,它们的结构文件很是简单,就是一个列表页面,我们这里间接利用 RecyclerView 。可是还有上拉加载更多呢?我们这里利用谷歌推出的 jetpack 系列库中的 paging 库,paging 的利用还算简单,可是需要重写 PositionalDataSource 类来实现 DataSource.Factory ,具体学问就不细致说了,可上彀查询材料,也可看我的这篇博客,此中还将谷歌的示例由 kotin 转成 java (我必然是太闲了 ( ̄▽ ̄))

这下子就清晰了,我们通过 LivePagedListBuilder 设置了一个数据源,然后获取数据源的回调更新界面给 adapter 。同时如许还有一个益处,paging 中利用到了会主动判断 fragment 的 lifeCycle ,也就是说当界面不具有的之后,数据是不会通过回调通知 ui 的,避免了运转过程中 ui 曾经销毁的问题。

ok ,上面我们曾经晓得了在 netlistFragment 中会通过 paging 判断当前的列表能否无数据仍是拉到页面底部需要请求更多,然后通过接口回调的体例将数据传送给 adapter 。那么剩下的就是在 adapter 的数据显示了。

一种是列表都是大图,一种是左边为大图,一种是三种图片在一路。那么要怎样实现呢?RecyclerView.Adapter 很好的处置了这种环境,我们只需要重写 getItemViewType 方式,判断当前的旧事需要显示哪品种型的旧事,然后建立响应的 viewHolde 即可,代码如下:

以上就是整个旧事栏目标数据显示,剩下的图片频道以及视几次道的ui根基大同小异,就不在烦琐了。

写道这里,其实一个简单项目也就完成了,说实话这真是一个相当简单的旧事UI,此刻我们的项目曾经完成了 80% 了,剩下的就是重头戏,视频播放了,视频播放会采纳 ffmpeg 的体例,也就是说间接利用 ndk 开辟的体例进行播放流视频,说实话,这方面的工具相当麻烦,特别是博主并非搞 C/C++ 身世的,呈现了问题都感受相当的棘手,不晓得怎样处置,可是仍是需要将方针完成,列位看官就等着下一期吧!

若是大师对于项目标后续感乐趣能够关心我的小我微信公家号,每次更新城市在上面进行推送,还能够插手QQ群配合前进呢

有一段时间没有写博客了,作为2017年的第一篇,初志起始于前段时间一个接触安卓开辟还不算太长时间的伴侣聊到的一个问…

PagerAdapter阐发与Fragment懒加载的几种实现 Deprecated 时间:2019年8月23日 …

感恩 这几天降温,很多多少人都伤风了,很可惜,我也伤风了,感恩老天爷下了场小雪,早上…

更多精彩报道,尽在https://www.hzdymy.com

发表评论

电子邮件地址不会被公开。 必填项已用*标注