基于Android Architecture Component
1.最近看了一些文章 理解Android Architecture Components系列(谷歌官方地址),就想自己重新搭建一套框架来巩固新知识。
2.源码地址 mvvm是基于databinding实现的,所以这里我们也是基于databinding来搭建的。这里的viewModel将会和activity的生命周期绑定。
3.主要讲一下使用方法以及简单的databinding体验,当然你也可以下载源码修改或者自己重新搭建自己的框架。
此框架kotlin版本的项目实战 kotlin编写仿iOS网易云音乐的音乐播放器
首先新建一个空项目。
依赖库第二步 集成mvvm的框架库 implementation 'com.kotle:mvvmlib2:1.0.1'
添加databindind支持
在app的android下面添加然后我们准备工作已经完成,可以开始开发了。
第三步 新建一个activity类,一个viewModel类,一个model类
为什么新建这几个类,看谷歌详细介绍
不想看的话,我就用自己的理解简单介绍下:
activity:这个不用多介绍了
viewModel:与setContentView()的xml文件实现双向绑定,以及一些逻辑控制
model:主要用于提供数据,比如是从数据库获取还是从网络获取。
model类继承BaseNetWork:
代码示例viewModel类继承BaseViewModel:,并重写构造函数和实现抽象方法。
activity类:在修改activity类之前,需要修改一下对应的xml文件如下,至于为什么修改这样,是属于dataBinding的介绍,目前先不讲。有兴趣的可以看一下别人的介绍
xml截图设置完xml文件之后,dataBinding会自动生成一个类,根据layout文件名来命名(比如 activity_main.xml,对于类ActivityMainBinding)
然后让activity继承BaseMvvmActivity,并传入两个泛型,一个是viewModel,一个是ActivityMainBinding
activity类然后启动项目看一下打印日志
日志截图实验证明,你不需要在activity里面手动调用viewModel,它会随着activity的生命周期来创建和销毁。
下面介绍viewModel向activity传入数据。
在viewModel新建一个变量
在Activity接收这个值,并观察是在什么时候接收的
Activity类再看一下打印日志:
日志内容明明是在oncreate()设置的值,为什么是在onstart()之后才收到呢?这个就是MutableLiveData的作用,发送的时间不管在什么时候,activity总是在onstart()之后接收,并且在界面不可见的时候也不会接收到数据。
总结一下:
在Activty类中,不需要findViewById,一切用父类的getBind()来操作,对于viewModel对象可以通过getViewModel()来获取。
在ViewModel类中,获取NetWork对象使用getNetWork(),并且可以通过getApplication()拿到全局的application。
还有不懂得可以评论,大家一起探讨。
此框架kotlin版本的项目实战 kotlin编写仿iOS网易云音乐的音乐播放器