android MVP初級

以前用的MVC,最近換的MPV,優(yōu)勢并沒有具體體會出來,但是代碼的可能性確實提高很多.將一些自己是怎么寫MVP的吧.

參考:http://blog.csdn.net/lmj623565791/article/details/46596109 ?張鴻洋的博客

我參考此文章,然后根據(jù)自己在項目中的理解,整理了一下MVP的書寫順序,可能方便理解.

首先講一下概念,MVP,理解為Model,View,Presenter.其中View指android的界面,就是activity.Model指數(shù)據(jù)源,在此可以理解為所有數(shù)據(jù)都從這個class中獲取.這個時候,界面有了,數(shù)據(jù)有了,怎么填充的呢,那就是Presenter的作用了,Presenter負(fù)責(zé)調(diào)度所有數(shù)據(jù)以及點擊事件.而MVP的本質(zhì),就是通過接口傳遞數(shù)據(jù)與點擊事件,達(dá)到界面和數(shù)據(jù)源之間沒有直接聯(lián)系,解除耦合性.

廢話少說,開始書寫

首先,既然是MVP,那么View,Model,Presenter當(dāng)然都不能少,于是可以創(chuàng)建一下的package


現(xiàn)在,我們在view中創(chuàng)建一個新的activity,就按照登錄為列子吧.

創(chuàng)建LoginActivity

現(xiàn)在寫xml的布局


因為代碼不好復(fù)制,我就截圖了,之后會上傳到github上去,大家可以參考

現(xiàn)在我們會Activity中初始化控件吧.


好了,到目前為止,Activity的先暫時放置.

按照上面的概念,這個時候我們還沒有MVP中的M和P,那就創(chuàng)建他們.


因為要靠接口傳遞信息和事件,那么我們分別給Activity和Model創(chuàng)建Interface.


分別實現(xiàn)各自的接口吧.

因為Presenter是溝通的橋梁,現(xiàn)在開始書寫Presenter

添加屬性:IloginView(這個是接口哦),LoginModel.構(gòu)造方法


現(xiàn)在,去Activity中創(chuàng)建Presenter并初始化.


寫了這么多,好像具體的實現(xiàn)方法都沒有寫出來,別急,這都是需要準(zhǔn)備好的,接下來就是具體實現(xiàn)邏輯的代碼了,可能會比較繞.

在Activity中,給button設(shè)置點擊事件.

這個當(dāng)然應(yīng)該是點擊登錄的事件了,但是我現(xiàn)在這個事件的具體實現(xiàn)代碼,并不在Activity中寫,于是我調(diào)用presenter的方法.


presenter.login()的方法,我只是剛想出來,現(xiàn)在Presenter中還沒有,那么我們就create此方法;


那么里面寫點什么呢?按照我們的邏輯,登錄,肯定要獲取"賬號"和"密碼",然后傳給登錄的接口.

我們已經(jīng)將數(shù)據(jù)獲取強(qiáng)行定義到model中,那么,我們就在model中寫好登錄的方法

.

LoginListener是沒有的,我們自己創(chuàng)建.


既然model中的login()方法創(chuàng)建好了,我們就在presenter中的login()中引用吧.


那么,問題來了,這里的三個參數(shù),從何而來呢?用戶名和密碼當(dāng)然要從Activity中獲取了,如何獲取?簡單的接口傳值而已.


寶寶們可曾記得,我們的IloginView可是一點代碼都沒有寫呀.現(xiàn)在就創(chuàng)建getUserName(),getUserPsd(),getLOginListener()這三個方法吧.


當(dāng)我們創(chuàng)建好這三個方法的時候,Activity報錯了哦,因為我們沒有實現(xiàn)IloginView的方法,那就實現(xiàn)它


咦,這個return是什么?這就是我們要傳遞給presenter的數(shù)據(jù)了. 修改一下return的內(nèi)容吧.


現(xiàn)在我們有了UserName和UserPsd,還有了登錄之后的回調(diào).那么我們?nèi)ズ煤脮鴮懸幌翸odel中的Login()方法吧.

因為我沒有寫接口,就暫時模擬一下,如果都不為空,就算登錄成功,有一個是空的就登錄失敗.好了,我們會Activity的Login回調(diào)中等待吧.


為了方便觀測整個邏輯的結(jié)果,我有給回調(diào)加了吐司.

現(xiàn)在我們測試一下吧.啟動項忘記改了,不好意思......


可能有的小伙伴還會耿耿于懷一件事,就是我們?yōu)長oginModel創(chuàng)建的接口ILoginModel沒有寫內(nèi)容,這是干嘛的呢?

我們現(xiàn)在來模擬另外一件事,我現(xiàn)在要給UserName設(shè)置默認(rèn)值,而這個數(shù)據(jù)又是從Model中獲取的.那么我們就用到這個接口了.

好的,現(xiàn)在回到Activity中,我們使用presenter,創(chuàng)建presenter.setUserNme();方法;


這么看的話,ILoginView中增加setUserName(String username);方法,而這時,LoginModel的getUserName();方法就有些尷尬,可以直接創(chuàng)建,也可以寫在接口中,我推薦寫在接口中,這是可好習(xí)慣.然后實現(xiàn)該方法.


因為添加了ILoginView的setUserName()方法,Activity中實現(xiàn)該方法,此時的參數(shù)userName就是從Model中傳遞過來的.


其實這個ILoginModel就是為了從Model給Presenter傳數(shù)據(jù)的,跟ILoginView都是一樣的作用.

感覺這個寫下來,再根據(jù)自己的項目寫一寫,理解起來就很容易了

https://github.com/QunCheung/MVPDemo ?github的地址,請大家根據(jù)自己的gradle改一下版本,我是3.3的

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末驹沿,一起剝皮案震驚了整個濱河市喷橙,隨后出現(xiàn)的幾起案子抖锥,更是在濱河造成了極大的恐慌,老刑警劉巖且蓬,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異题翰,居然都是意外死亡恶阴,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進(jìn)店門豹障,熙熙樓的掌柜王于貴愁眉苦臉地迎上來冯事,“玉大人,你說我怎么就攤上這事血公£墙觯” “怎么了?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵累魔,是天一觀的道長摔笤。 經(jīng)常有香客問我,道長薛夜,這世上最難降的妖魔是什么籍茧? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮梯澜,結(jié)果婚禮上寞冯,老公的妹妹穿的比我還像新娘渴析。我一直安慰自己,他們只是感情好吮龄,可當(dāng)我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布俭茧。 她就那樣靜靜地躺著,像睡著了一般漓帚。 火紅的嫁衣襯著肌膚如雪母债。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天尝抖,我揣著相機(jī)與錄音毡们,去河邊找鬼。 笑死昧辽,一個胖子當(dāng)著我的面吹牛衙熔,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播搅荞,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼红氯,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了咕痛?” 一聲冷哼從身側(cè)響起痢甘,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎茉贡,沒想到半個月后塞栅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡块仆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年构蹬,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片悔据。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡庄敛,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出科汗,到底是詐尸還是另有隱情藻烤,我是刑警寧澤,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布头滔,位于F島的核電站怖亭,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏坤检。R本人自食惡果不足惜兴猩,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望早歇。 院中可真熱鬧倾芝,春花似錦讨勤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至借尿,卻和暖如春刨晴,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背路翻。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工狈癞, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人茂契。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓亿驾,卻偏偏與公主長得像,于是被迫代替她去往敵國和親账嚎。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,044評論 2 355

推薦閱讀更多精彩內(nèi)容