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

简介: 玩安卓从 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 对大家没什么用,所以没回写的时候都不知道该写点什么。。。

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

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

跑题了跑题了,上面也说了,这篇文章是这个系列的最后一篇文章

剩下的小问题

总结之前还需要解决一个问题,前段时间看见有人给文章进行评论了下,大概意思是说项目的 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 传进去即可。

具体方法实现代码如下:

@CallSuper
override fun startLoading() {
    defaultLce?.startLoading()
}
@CallSuper
override fun loadFinished() {
    defaultLce?.loadFinished()
}
@CallSuper
override fun showLoadErrorView(tip: String) {
    defaultLce?.showLoadErrorView(tip)
}
@CallSuper
override fun showBadNetworkView(listener: View.OnClickListener) {
    defaultLce?.showBadNetworkView(listener)
}
@CallSuper
override fun showNoContentView(tip: String) {
    defaultLce?.showNoContentView(tip)
}

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

项目总结

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

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

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

结尾

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




目录
相关文章
|
7天前
|
IDE Android开发 iOS开发
探索Android与iOS开发的差异:平台选择对项目成功的影响
【9月更文挑战第27天】在移动应用开发的世界中,Android和iOS是两个主要的操作系统平台。每个系统都有其独特的开发环境、工具和用户群体。本文将深入探讨这两个平台的关键差异点,并分析这些差异如何影响应用的性能、用户体验和最终的市场表现。通过对比分析,我们将揭示选择正确的开发平台对于确保项目成功的重要作用。
|
6天前
|
Java Maven 开发工具
第一个安卓项目 | 中国象棋demo学习
本文是作者关于其第一个安卓项目——中国象棋demo的学习记录,展示了demo的运行结果、爬坑记录以及参考资料,包括解决Android Studio和maven相关问题的方法。
第一个安卓项目 | 中国象棋demo学习
|
24天前
|
JavaScript 前端开发 Android开发
让Vite+Vue3项目在Android端离线打开(不需要起服务)
让Vite+Vue3项目在Android端离线打开(不需要起服务)
|
24天前
|
IDE 开发工具 Android开发
安卓与iOS开发对比:平台选择对项目成功的影响
【9月更文挑战第10天】在移动应用开发的世界中,选择正确的平台是至关重要的。本文将深入探讨安卓和iOS这两大主要移动操作系统的开发环境,通过比较它们的市场份额、开发工具、编程语言和用户群体等方面,为开发者提供一个清晰的指南。我们将分析这两个平台的优势和劣势,并讨论如何根据项目需求和目标受众来做出最佳选择。无论你是初学者还是有经验的开发者,这篇文章都将帮助你更好地理解每个平台的特性,并指导你做出明智的决策。
|
27天前
|
Java 开发工具 Android开发
安卓与iOS开发:平台选择对项目成功的影响
在移动应用开发的浩瀚宇宙中,安卓和iOS两大星系璀璨夺目,各自拥有独特的光芒。本文将穿梭于这两个平台之间,探讨它们在开发环境、用户群体、成本效益等方面的差异,以及这些差异如何影响一个项目的航向和终点。我们将从初学者的视角出发,逐步深入,揭示选择合适平台的重要性,以及如何根据项目需求做出明智的选择。无论你是即将启航的新手开发者,还是已经在这片星海中航行的老手,这篇文章都将为你提供有价值的导航信息。
42 2
|
1月前
|
Java 开发工具 Android开发
探索安卓与iOS开发的差异:平台选择对项目的影响
在移动应用开发的广阔天地中,安卓和iOS两大平台各自占据着重要的位置。本文旨在深入探讨这两个平台在开发过程中的主要差异,包括编程语言、开发工具、用户界面设计、性能优化以及市场分布等方面。通过对比分析,我们将揭示平台选择如何影响项目规划、执行效率和最终成果,为开发者在选择适合自己项目需求的平台时提供参考依据。
|
2月前
|
IDE 开发工具 Android开发
探索安卓与iOS开发的差异:平台选择对项目成功的影响
在移动应用开发的广阔天地中,安卓和iOS两大平台各领风骚,引领着技术进步的潮流。本文旨在深入剖析这两个平台在开发过程中的关键差异点,包括编程语言、开发工具、用户界面设计以及市场分布等方面。通过对比分析,我们不仅能更好地理解每个平台的独特优势,还能洞察这些差异如何影响项目决策和最终成果。无论你是开发者还是企业决策者,了解这些内容都将助你一臂之力,在选择适合自己项目的开发平台时做出更明智的决策。
|
2月前
|
IDE 开发工具 Android开发
探索iOS与安卓开发的差异:平台选择对项目成功的影响
【8月更文挑战第22天】在数字化时代,移动应用成为企业和个人展示创意、提供服务的重要工具。iOS和安卓作为两大主流平台,各自拥有独特的优势和限制。本文将深入探讨这两个平台在开发过程中的主要差异,以及这些差异如何影响项目规划、用户体验和市场策略。通过比较分析,旨在为开发者和企业决策者提供有价值的见解,帮助他们根据项目需求做出明智的平台选择。
|
2月前
|
SQL 分布式计算 大数据
Android项目架构设计问题之平衡技术选型与业务需求之间的关系如何解决
Android项目架构设计问题之平衡技术选型与业务需求之间的关系如何解决
36 0
|
2月前
|
开发工具 Android开发
Android项目架构设计问题之SDK内部减少每次回调时的冗余判断逻辑如何解决
Android项目架构设计问题之SDK内部减少每次回调时的冗余判断逻辑如何解决
21 0
下一篇
无影云桌面