目的
首先先说出,最终的目的是现在主流的MVP+RxJava+Retrofit+OkHttp框架。让大家心里有底
开发工具Android Studio3.0,还在用eclipse的同鞋,强烈推荐你跨出这一步,你会发现一个新的世界。android studio都出来这么久了,你还在远古时代做开发,说句不好听的,你完全与时代脱轨,你不适合做开发(纯属个人观点)
本篇就只有三部分,第一部分就是新建一个Application,第二部分就是BaseActivity,第三部分就是BaseFragment
Application
首先你得有application类,去初始化应用只用初始化一次的内容,继承Application,然后在清单文件里面注册。
1 | package com.haichenyi.myproject; |
如上代码,我这里就初始化了一个全局application单例对象,还初始化square公司出品的一个内存检测工具,用于检测你项目中内存泄漏情况。便于你优化项目。
如上图所示,这个就是清单文件,在application结点下面,添加name标签,内容就是你创建的application的名字。这里你还需要添加两个内存检测的依赖。
如上图所示,首先把你的项目结构视图切换到Project,打开你的app目录下的build.gradle文件,在dependencies结点下面(只要是添加开源库都是在该结点下面,后面就不说了),添加如下两行代码:
1 | releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.4' |
最后的1.5.4是版本号,你可以在github上面搜索leakcanary,找最新的版本
BaseActivity
创建基类BaseActivity,也就是所有Activity的父类。还有一个基类的接口BaseView,BaseActivity继承刚才添加的依赖的SupportActivity类,实现BaseView接口,并且实现点击事件的接口(选择实现,你要是不乐意在基类里面写,你可以在你自己的子类里面重新实现一遍也是可以的)。代码如下:每个方法注释写的很清楚,就不用一一解释了
1 | package com.haichenyi.myproject.base; |
上面是目前BaseActivity代码,注释写的很清楚,你会发现BaseView你并没有,下面我给出BaseView的代码
1 | package com.haichenyi.myproject.base; |
BaseView就是一个接口,是所有V层的基类,代码很简单,Toast方法,显示隐藏加载的对话框方法,检验token是否过期的方法,finish当前页面的方法。什么?Toast方法你没有,下面我贴出来我的Toast的工具类
1 | /** |
上面我贴出了三个类,这里我要说明的是,我又创建了两个package,一个是base,一个是utils,我把BaseActivity,BaseView,MyApplication放在base包下面,Toast的工具类放在utils包下面
再就是添加一些常用的东西了,这里我没有用黄油刀,用过一段时间之后,感觉他的每个控件都是全局的,有点占内存,就放弃了。我下面贴出BaseActivity新增的伪代码:
1 | /** |
这里我需要说明的是,新增了一个开源框架,就是设置状态栏背景颜色的systembartint。
1 | implementation 'com.readystatesoftware.systembartint:systembartint:1.0.3' |
再就是设置activity标题内容,左边,右边的内容,左边右边可能是文字,也可能是图片。所以,我在用的时候,都是用的TextView,ImageView,不能设置文字。方法如下:
1 | public BaseActivity setTitles(CharSequence title) { |
可以看到上面的方法返回值都是BaseActivity,这样做的目的就只有一个,可以连点,写一个方法之后,可以接着点写下一个方法,不用写一个方法就要加分号,就换一行写下一个方法。
还要加一句,在你的app主题里面添加两个item,也就是你的res目录下面的style:
1 | <item name="windowActionBar">false</item> |
我这里贴出我目前的style的图片
下面有一个LineHorizontal样式,就是你toolbar下面的那个横线
BaseFragment
BaseFragment跟BaseActivity的逻辑是差不多的,我这里就贴出代码
1 | package com.haichenyi.myproject.base; |
两者在布局抽象方法里面有一点区别,Activity的传了Boundle参数,Fragment没有传,因为Fragment可以通过getArguments()方法获取到这个对象,而Activity不能获取到。
总结
到此,一个简单的项目框架就出来了,目前还是框架的第一步,是一个雏形,还不包括MVP,dagger等等,下一篇就加上MVP,我这个人有个好习惯,就是喜欢写注释,我注释写的很清楚,是干什么用的,我也衷心的希望,你能写好注释。