玩安卓从 0 到 1 之项目总结

前言

这篇文章是这个系列的第七篇文章了,也是我准备写的这个系列的最后一篇文章。下面是前六篇文章:

1、玩安卓从 0 到 1 之总体概览

2、玩安卓从 0 到 1 之项目首页

3、玩安卓从 0 到 1 之首页框架搭建。

4、玩安卓从 0 到 1 之架构思考

5、玩安卓从 0 到 1 之适配器思考

6、玩安卓从 0 到 1 之列表一键置顶

按照惯例,放一下 Github 地址和 apk 下载地址吧!

apk 下载地址:www.pgyer.com/llj2

Github地址:github.com/zhujiang521…

这个系列刚开始写的时候觉得有好多东西想写,但是真正写的时候又不知道该怎么写,也不是不知道该怎么写,怎么说呢,有的东西自己本来之前没巩固好,在写这个项目的时候又巩固了下,这种地方很多,说难也不难,说简单也不简单,怕写的太 Low 对大家没什么用,所以没回写的时候都不知道该写点什么。。。

转念一想,自己写博客的目的到底是什么?最开始写的时候不过是想当成一个笔记,把易错的问题都记录下来,之后遇到能快速记起来,仅此而已。但是慢慢的,看我博客的人越来越多,写的时候并不是最开始那么随心所欲了,怕写的不好别人说,畏首畏尾地。

不行不行,不能这样,以后博客中有什么想写的就写了,再也不觉得大家都会就不写了,因为肯定还是有人和我一样的。

跑题了跑题了,上面也说了,这篇文章是这个系列的最后一篇文章,如果大家对这个项目有任何疑问可以在评论区告诉我,或者去 Github 给我提 issues 也行。

剩下的小问题

总结之前还需要解决一个问题,前段时间看见有人给文章进行评论了下,大概意思是说项目的 Base 类太臃肿了,职责太多,也确实是,BaseActivity 和 BaseFragment 中写了好多东西,公共的东西我都想放在一起抽出来,之前确实没有考虑到,其实之前写 MVP 的时候就是那样做的,但是这个项目中确实没有这么搞,那就来搞下吧!

评论

大概看了下 BaseActivity 和 BaseFragment 的代码,觉得最应该抽出来的就是 LCE 模块,因为BaseActivity 和 BaseFragment 中都有这块代码,其实可以单独抽出来的。

先来看下之前的代码吧,篇幅原因就不贴代码,给大家一个链接去查看下历史代码吧:

https://github.com/zhujiang521/PlayAndroid/blob/master/core/src/main/java/com/zj/core/view/base/BaseActivity.kt

BaseActivity 和 BaseFragment 中的 LCE 逻辑差不多,之前是写了一个接口,然后 BaseActivity 和 BaseFragment 分别实现几个接口,这样写也是没有问题的,但是 BaseActivity 和 BaseFragment 的这块逻辑基本一样,这样写就不太合适了,咱们完全可以将这一部分进行抽取出来,在 BaseActivity 和 BaseFragment 中直接进行调用就行。

interface ILce {

    fun startLoading()

    fun loadFinished()

    /**     * 当Activity中的加载内容服务器返回失败,通过此方法显示提示界面给用户。     *     * @param tip     * 界面中的提示信息     */    fun showLoadErrorView(tip: String = Play.context!!.getString(R.string.failed_load_data))

    /**     * 当Activity中的内容因为网络原因无法显示的时候,通过此方法显示提示界面给用户。     *     * @param listener     * 重新加载点击事件回调     */    fun showBadNetworkView(listener: View.OnClickListener)

    /**     * 当Activity中没有任何内容的时候,通过此方法显示提示界面给用户。     * @param tip     * 界面中的提示信息     */    fun showNoContentView(tip: String)

}

其实就上面这几种状态,开始加载、加载完成、加载错误、加载失面、无内容,接口定义好了,这回就不让 BaseActivity 和 BaseFragment 来分别实现了,这回来搞一个实现类吧,在实现类中直接实现了:

class DefaultLceImpl constructor(    private val loading: ProgressBar?,    private val loadErrorView: View?,    private val badNetworkView: View?,    private val noContentView: View?) : ILce {

    override fun startLoading() {        loadFinished()        loading?.visibility = View.VISIBLE    }

    override fun loadFinished() {        loading?.visibility = View.GONE        badNetworkView?.visibility = View.GONE        noContentView?.visibility = View.GONE        loadErrorView?.visibility = View.GONE    }

    override fun showLoadErrorView(tip: String) {        loadFinished()        val loadErrorText = loadErrorView?.findViewById<TextView>(R.id.loadErrorText)        loadErrorText?.text = tip        loadErrorView?.visibility = View.VISIBLE    }

    override fun showBadNetworkView(listener: View.OnClickListener) {        loadFinished()        badNetworkView?.visibility = View.VISIBLE        badNetworkView?.setOnClickListener(listener)    }

    override fun showNoContentView(tip: String) {        loadFinished()        val noContentText = noContentView?.findViewById<TextView>(R.id.noContentText)        noContentText?.text = tip        noContentView?.visibility = View.VISIBLE    }

}

这就OK了,是不是很简单?上面的实现类来简单说下吧,构造方法中需要接受四个 View 的参数,看参数的名称大家应该就能知道每个参数是啥意思了,剩下的就是基本操作,直接把之前 BaseActivity 中的代码搬过来就行。

再来看下 BaseActivity 和 BaseFragment 中该怎样写吧!

首先肯定也要实现 LCE 接口:

abstract class BaseActivity : AppCompatActivity(), ILce, BaseInit {}

接下来就不需要将这些状态在 BaseActivity 和 BaseFragment 中了,因为咱们已经写好了实现类,只需要进行使用即可:

defaultLce = DefaultLceImpl(    loading,    loadErrorView,    badNetworkView,    noContentView)

初始化很简单,只需要将用到的几个 View 传进去即可。

具体方法实现代码如下:

@CallSuperoverride fun startLoading() {    defaultLce?.startLoading()}

@CallSuperoverride fun loadFinished() {    defaultLce?.loadFinished()}

@CallSuperoverride fun showLoadErrorView(tip: String) {    defaultLce?.showLoadErrorView(tip)}

@CallSuperoverride fun showBadNetworkView(listener: View.OnClickListener) {    defaultLce?.showBadNetworkView(listener)}

@CallSuperoverride fun showNoContentView(tip: String) {    defaultLce?.showNoContentView(tip)}

BaseActivity 这就可以了,BaseFragment 同理,代码基本一样,这里就不赘述了。

项目总结

这个小项目前前后后写了挺久,第一版是在 20 年 5 月份完成的,之后就没再咋动过,后来在九月份又开始搞,搞到去年年底终于把项目搞得稳定了一些,在小米云平台、Vivo云平台也都进行了测试,结果都是全通过。

项目使用了当下安卓最流行的 MVVM 框架,基本按照官方给出的设计图完成,项目中也使用了很多 JackPek 的组件,比如:ViewModel、Room、DataStore等等,总体使用协程来代替之前的线程。

项目中代码之前还有一部分是 Java 编写的,后来也都全部转为了 Kotlin ,有助于自己和大家更好地掌握 kotlin 的用法。

通过写这个小项目自己学习到了很多东西,很多东西不再是纸上谈兵,也都实际运用到了项目中,挺好的,大家也可以写一个小项目,如果在学习一个新的东西的时候就可以直接放到自己的小项目中去,这样就不需要写一堆小 Demo 了,而且还可以融会贯通。

结尾

有时候真的看不透博客官方,自己无心随便写的一篇文章,官方就使劲给你推荐,几天的时间阅读量就能破万;而当自己好好地、花了好几天时间写的一篇文章,阅读量竟然只有一百多。。。。也是不知道说什么了,可能是因为随手写的文章更加通俗易懂吧!

转眼间已经 2021 年了,前两天写了一篇年终总结,今天又来了一篇项目总结,虽然都没说个啥。。。

那句祝福怎么说来着?2020 实鼠不易,2021 牛转乾坤!

2020 年所有的不开心都已经过去,我们迎来的是崭新的 2021 年,而且今年还是自己的本命年!

希望疫情能早点过去,希望大家都能越来越好。

差点忘了一件事,我在 CSDN 的博客之星活动中进入了前 200,现在需要投票争取更靠前的名额。。。既然已经进了,那就希望名次靠前一点吧。这个活动很那啥,每天都能投票,发了个朋友圈,之后都不好意思找别人了,一回还行,每天都去找别人就太过分了

玩安卓从 0 到 1 之项目总结相关推荐

  1. 玩安卓从 0 到 1 之架构思考

    前言 这篇文章是这个系列的第四篇文章了,下面是前三篇文章: 1.玩安卓从 0 到 1 之总体概览 2.玩安卓从 0 到 1 之项目首页 3.玩安卓从 0 到 1 之首页框架搭建. 按照惯例,放一下 G ...

  2. 玩安卓从 0 到 1 之列表一键置顶

    前言 系列文章 这篇文章是这个系列的第六篇文章了,下面是前五篇文章: 1.玩安卓从 0 到 1 之总体概览 2.玩安卓从 0 到 1 之项目首页 3.玩安卓从 0 到 1 之首页框架搭建. 4.玩安卓 ...

  3. 玩安卓从 0 到 1 之首页框架搭建

    前言 这篇文章是这个系列的第三篇文章了,前两篇文章分别是玩安卓从 0 到 1 之总体概览和玩安卓从 0 到 1 之项目首页. 一开始想的是一篇文章搞定,从项目的搭建到完成把所有的知识点写一遍,努力不做 ...

  4. 玩安卓从 0 到 1 之总体概览

    玩安卓从 0 到 1 之总体概览 前言 其实写MVVM?瞎搞一波?和MVVM?继续搞一波这两篇文章的时候没觉得水,但是后来自己看了一遍,感觉除了截了几张图之外并没说什么关于技术的东西,这就很扯淡了,技 ...

  5. 安卓6.0权限处理在项目中的实践

    前言 相关开源项目 使用eclipse和grant开源库权限管理 更新api到23 获得v4包 项目实战开发 默认许可权限无需授权 总结和建议 前言 最近公司的app说装在安卓6.0的系统上程序直接崩 ...

  6. 《云阅2.0》一款同时看玩安卓和干货集中营资讯的App

    一.云阅2.0 <云阅>一个仿网易云音乐UI,使用Gank.Io及豆瓣Api开发的开源项目 在云阅发布第一版之后,大约经过了近两年的时间,不断的更新迭代,现在已经完成了2.0,相比第一版它 ...

  7. 荣耀7x Android8,荣耀8/畅玩7X确认升级安卓8.0

    原标题:荣耀8/畅玩7X确认升级安卓8.0 IT之家12月11日消息 据外媒报道,日前,荣耀总裁赵明在接受塞尔维亚一家在线媒体采访时透露,适配荣耀8.荣耀8 Pro(荣耀V9国际版)的安卓8.0系统目 ...

  8. android beta项目官方页面,安卓7.0开发者预览版如何安装?Android Beta项目正式上线...

    谷歌现在越来越不按常理出牌了,今天早些时候,他们已经提前秀出了Android 7.0.从最新亮相的Android N开发者预览版来看,谷歌进行了一些调整,但更重要的是,增加了一些新的功能,比如分屏.新 ...

  9. flutter持久化_开源项目【WanAndroid_Flutter】玩安卓 Flutter 版

    本文首发于 binaryshao的博客 WanAndroid_Flutter 项目地址 玩安卓客户端 Flutter 版,可以查看各种开发相关的知识,适配了 Android 和 iOS,内容比较完整 ...

最新文章

  1. 二叉排序树的相关操作
  2. MVC ---- DBHelper.ttinclude
  3. Linux C编程--进程介绍6--进程的各种标识
  4. [数据库基础]——索引详解
  5. Java中怎样遍历Map的所有数据
  6. Spring 中的隔离级别
  7. hana studio版本和hana版本的区别
  8. 深度学习导论(2)深度学习案例:回归问题
  9. 两个链表第一个公共节点
  10. 在JSP页面中,对同名的CHECKBOX的处理
  11. 给安利公司董事长郑李锦芬女士的一封信
  12. 漫画 | 为什么 MySQL 数据库要用 B+ 树存储索引?
  13. 编译与运行、解释程序与编译程序
  14. Attention Mechanisms in Computer Vision: A Survey论文阅读
  15. Opencv 傅立叶变换 傅立叶逆变换
  16. 【游戏】GBA经典游戏《逆转裁判》1、2、3合集发布
  17. 不规则动词分类记忆一览表
  18. java类求圆的面积周长_java编程 1. 设计一个求圆的面积和周长的类,要求:1计算当半径r,JAVA编程题。编写一个应用程序计算圆的周长和面积,设圆的半...
  19. Python练习3:求N的多次方
  20. 电子计算机司法鉴定客体特征,电子证据司法鉴定的含义和特点是什么?

热门文章

  1. 阿里巴巴Java开发规范(终极版v1.3.0)--个人整理
  2. 产品概念之4/4:产品包 —— 升维思考,降维打击
  3. 量子计算机需要的物理知识,量子计算机和物理学上的量子力学关系大吗?
  4. 【T+】畅捷通T+存货档案批量修改存货属性
  5. Fer2013 数据集人脸表情识别 详细代码
  6. Mac无法开机?如何修复并使其重新启动
  7. 激活synopsys命令
  8. “我36岁了,还得对28岁的领导赔笑脸”:中年人的职场,心酸自知
  9. 浏览器和服务器之间的通信
  10. Win10设置Win+R快捷方式或保存Path路径消失无效