推薦一個Gradle的學習系列,Gradle相關的知識一直很匱乏,難得發現一個不錯的系列:

http://www.cnblogs.com/davenkin/p/gradle-learning-1.html
本文作者
本文由螞蟻提供。
螞蟻的博客地址:
http://yugai.github.io/archives/
對於MVP,其實是非常適合在Android項目中使用的架構,如果你目前還不清楚MVP的架構究竟是什么樣子,那么可以參考Google給出的示例:
https://github.com/googlesamples/android-architecture
如果當前這個MVPPlugin不能滿足你的需求(很多時候,會根據自身對MVP結構做調整),你可以自己查看插件的寫法,做一些符合你所使用的規則上的調整,關於插件的寫法:
根據該篇教程,以及本篇文章的實例源碼結合,做一些定制肯定沒問題。
1、前言
從Google推出官方MVP架構demo到現在大概有一年多的時間了,半年前大概在所有的Android技術社區都有提到MVP架構,現在關於MVP架構的話題似乎沒有以前那么多了,可能是因為大家都已經能夠熟練的使用MVP了。
在這里先炒碗閑飯,提供了一個快速生成MVP模式的插件。
https://github.com/yugai/MVPPlugin
在Android Studio的設置面板搜索該插件。

2、遇到的問題與解決方案
關於MVP模式,我自己也使用了很久,實際使用中還是存在很多缺點的。例如一個很簡的activity我們就需要去新建多個類,每個操作之間還需要通過接口回調的方式。雖然邏輯變得更加的清晰了,但隨之而來的是代碼量變得更大。
解決方案
那么有沒有什么辦法使MVP模式變得更簡潔,能夠更快速的使用呢?其實大家一般的都會利用泛型封裝一下MVP的base類,通過泛型所提供的類型去實例化View層和Presenter層,在繼承封裝好的基類中可以快速的使用MVP模式。
這是的確是極大的提高了使用效率。但是無法避免的是我們在新建任意一個activity的時候都要去新建P層和V層。
而且通過泛型約束了之后,導致了我們在繼承的時候需要填寫多個泛型值。這樣的操作無疑相當繁瑣,而且無趣的。
后來在幾經思考下,我決定將MVP的模板代碼提取出來,通過插件自動生成那些簡單而又不得不做的操作。
3、解決的問題
你如果現在還沒有學習MVP模式,或者你還沒有熟練的使用MVP模式,這個將是你最快使用MVP模式的方式。因為你可能根本就不需要了解如何去搭建一個MVP的架構,只需要去在每一個層級去做好該做的職責就行了。
如果你已經使用過MVP架構的話,其中使用時候的痛楚應該不用多說了。每次在新建一個頁面的時候都需要進行重復的操作,這個插件能快速幫你生成一個簡單模板。
注意事項
在使用插件的時候,需要生成一個mvp的文件夾,其中封裝了MVP的架構,你可以根據自己需求去增加各種操作,但是請不要刪除里面的關鍵代碼。注意請先生成mvp的目錄再去創建別的MVP架構的界面。
頁面一般分為activity和fragment,在新建一個activity的時候你可以直接寫類名就好了。
例如你再新建頁面的時候填入login,插件會自動幫你生成login的文件夾,其中包含LoginActivity,LoginContract,LoginPresenter文件。
如果你要是需要生成一個fragment在新建頁面的時候,需要填寫loginfragment這時候插件也會幫你生成一個login文件夾,只不過LoginActivity變成了LoginFragment。那么你應該知道了,需要創建fragment的時候需要以fragment結尾,當然你也可以以activity結尾,效果和默認的不寫的一樣。
每次創建文件夾的時候,可能讀寫的速度有點慢,請等待2s左右。有時候創建完了后AndroidStudio並不會自動刷新文件夾,這時候你點擊下文件夾收縮再展開就好了。
4、使用步驟
1.請先搜索安裝MVPPlugin插件。還可以通過我的github中找到插件的jar包,從本地安裝。

2.在安裝完畢后,在任意文件夾下點擊新建都會顯示一個MVPFile的選項。

3.首先我們需要生成一個叫做mvp的文件夾,直接點擊MVPFile選項,輸入mvp即可。一定要先生成這個。

4.這時候我們就可以新建頁面了,比如我們要新建一個登陸頁面,這時候就可以輸入login,如果我們需要的是一個fragment,就在后綴添加fragment便行。



5.這個時候一個頁面也就完成就緒,例如我們需要實現一個登陸的功能,在LoginContract中View接口中編寫成功和失敗的回調,在Presenter接口中編寫登陸調用的接口。


6.這時候Activity和Presenter層都會提示錯誤,需要實現回調方法,我們按alt+enter好了。
在Activity中已經持有Presenter對象,反之在Presenter也存在View的對象,它們的名字叫mPresenter和mView。(是不是感覺有點神奇?可以自己去看看泛型的實例化,其中有個getInstance()方法算是淫技吧)。
之后我們就可套路來做就行了。


