# 一键生成MVP相关类

> 由于引入了MVP模式, 会较从前多了许多类, 典型的就是基本上每一个页面都有与之对应的View和Presenter, 至少会多两个类, 并且还需要使用泛型将三者关联起来. 懒癌晚期患者可能会很不适应, 我自己呢, 也觉得太麻烦, 因此花了一天时间开发了一个简单的IntelliJ/Android Studio插件 - MvpClassesGenerator来一键生成MVP的相关类.

### 插件安装方法

#### 本地安装

首先在 [GitHub](https://github.com/TheseYears/MvpClassesGenerator) 上下载 [MvpClassesGenerator.jar](https://github.com/TheseYears/MvpClassesGenerator/blob/master/MvpClassesGenerator.jar) 文件, 然后将其安装到Android Studio中即可使用, 当然前提是项目引用了CoreLibs库.

然后打开File - Settings, 在Plugins标签下, 点击Install plugin from disk, 然后选择MvpClassesGenerator.jar并重启Android Studio即可, 如下图所示: ![安装插件](https://1875682420-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LsLm05CJpHEySN-1J4I%2F-LsLm1BylwnYD_75uf0o%2F-LsLm8JYXs0zzKGiUF_N%2F20160907123033.png?generation=1572340275631756\&alt=media)

#### 在线安装

目前插件已上传至JetBrains Plugin Repository, 但由于还在审核, 所以暂不能在线安装.

### 使用方法

#### 唤起

插件快捷键是ctrl + shift + G, 如果有快捷键冲突可以通过Edit - Generate Mvp Classes唤起插件.

#### 设置

在使用之前, 请先在Android Studio的Settings的Other Settings下的MvpClassesGenerator中根据自己的项目设置一些必要的信息: ![设置](https://1875682420-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LsLm05CJpHEySN-1J4I%2F-LsLm1BylwnYD_75uf0o%2F-LsLm8J_qx1jjpiZoVtc%2F20160907124224.png?generation=1572340275451452\&alt=media)

**主模块包名:** 在Gradle中为application模块(即可运行)的包名. \
&#x20;**CoreLibs包名:** CoreLibs包名为BaseActivity/BasePresenter等所在的包, 即com.corelibs.base, 一般不会变. \
&#x20;**Activity/Fragment包名:** Activity/Fragment文件即APP界面所在包名(不需要包含完整包路径).\
&#x20;**View接口包名:** View接口所在包名(不需要包含完整包路径).\
&#x20;**Presenter包名:** Presenter所在包名(不需要包含完整包路径).\
&#x20;**主模块名:** 在Gradle中为application模块(即可运行)的名字, 一般为app

#### 使用

插件会收集一些总是会变动的信息, 如下图:

![插件](https://1875682420-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LsLm05CJpHEySN-1J4I%2F-LsLm1BylwnYD_75uf0o%2F-LsLm8Jbi_RL5p49eGwL%2F20160907124203.png?generation=1572340275396582\&alt=media)

**类名:** MVP类的名字, 如输入Test, 则会生成TestActivity或TestFragment, TestView, TestPresenter三个文件 \
&#x20;**Activity/Fragment所在的包名:** 不同于设置中的**Activity/Fragment包名**, 这里的包名指的是更细分的包的名字. \
&#x20;**App包名:** 同设置中的**主模块包名**, 在这里修改会同步到设置中.\
&#x20;**fragment:** 是否生成Fragment而不生成Activity.\
&#x20;**分页:** 是否需要分页.\\

#### 效果

看图说话:

![效果](https://1875682420-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LsLm05CJpHEySN-1J4I%2F-LsLm1BylwnYD_75uf0o%2F-LsLm8JdFHbi78eFwEYG%2F2.png?generation=1572340275465052\&alt=media)

#### 注意: 如果设置或对话框中信息填写不准确的话, 会将类生成到莫名其妙的位置! 另外, Java版本必须是8, 不然插件无效!

## 完
