搭建自己的 android MVP 框架

一、MVP 是什么概疆?
MVP逗威,全稱 Model-View-Presenter,它是從經(jīng)典的 MVC 演變而來的一個開發(fā)思想岔冀。應(yīng)用分層結(jié)構(gòu)凯旭,使得各層結(jié)構(gòu)各司其職,其中 Model 層負責提供數(shù)據(jù)使套,View 層負責頁面展示罐呼,Presenter 負責業(yè)務(wù)邏輯處理。

二侦高、MVP 有什么好處嫉柴?

MVC.png
MVP.png

上面兩張圖分別是 MVC 和 MVP 的結(jié)構(gòu)層次劃分圖,可以看到 MVP 相較于 MVC 的優(yōu)點在于 View 和 Model 層間的完全解耦奉呛。

三计螺、在 android 項目中搭建自己的 MVP 框架
現(xiàn)有 android 項目中夯尽,為了便于更好的開發(fā)和維護,基本采用 MVP 框架進行開發(fā)登馒。下面我們將一步一步進行 MVP 框架的搭建匙握。

public interface IBaseView {

    Activity getActivity();

}

public abstract class EABaseActivity<P extends EABasePresenter> extends AppCompatActivity
        implements IBaseView {

    private boolean isFirst = true;
    protected P presenter;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        generatePresenter();
        setContentView(getLayoutId());
        findViews();
        addEvents();
        if (presenter != null) presenter.onBundle(getIntent().getExtras());
    }

    private void generatePresenter() {

        Type type = getClass().getGenericSuperclass();
        try {
            Type[] types = ((ParameterizedType) type).getActualTypeArguments();
            presenter = (P) ((Class) types[0]).newInstance();
            presenter.setView(this);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    protected abstract int getLayoutId();

    protected void findViews() {
    }

    protected void addEvents() {
    }

    public Activity getActivity() {
        return this;
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (presenter != null) {
            presenter.onActivityResult(requestCode, resultCode, data);
        }
    }

    @Override
    protected void onStart() {
        super.onStart();
        if (isFirst) {
            if (presenter != null) presenter.onAttach();
            isFirst = false;
        }
    }

    @Override
    protected void onResume() {
        super.onResume();
        if (presenter != null) presenter.onResume();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (presenter != null) {
            presenter.onDetach();
            presenter = null;
        }
    }
}

Activity 的基類。

public class EABasePresenter<V extends IBaseView> {

    protected V view;

    public void setView(V view) {
        this.view = view;
    }

    public void onBundle(Bundle bundle) {

    }

    public void onAttach() {

    }

    public void onResume() {

    }

    public void onDetach() {

    }

    public void onActivityResult(int requestCode, int resultCode, Intent data) {

    }

}

四陈轿、總結(jié)
基本思想大體如此圈纺,還是要根據(jù)不同的項目進行自己調(diào)整,當然這個框架還很不完善麦射,在此只不過是拋塊磚罷了赠堵。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市法褥,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌酬屉,老刑警劉巖半等,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異呐萨,居然都是意外死亡杀饵,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門谬擦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來切距,“玉大人,你說我怎么就攤上這事惨远∶瘴颍” “怎么了?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵北秽,是天一觀的道長葡幸。 經(jīng)常有香客問我,道長贺氓,這世上最難降的妖魔是什么蔚叨? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮辙培,結(jié)果婚禮上蔑水,老公的妹妹穿的比我還像新娘。我一直安慰自己扬蕊,他們只是感情好搀别,可當我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著厨相,像睡著了一般领曼。 火紅的嫁衣襯著肌膚如雪鸥鹉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天庶骄,我揣著相機與錄音毁渗,去河邊找鬼。 笑死单刁,一個胖子當著我的面吹牛灸异,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播羔飞,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼肺樟,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了逻淌?” 一聲冷哼從身側(cè)響起么伯,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎卡儒,沒想到半個月后田柔,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡骨望,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年硬爆,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片擎鸠。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡缀磕,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出劣光,到底是詐尸還是另有隱情袜蚕,我是刑警寧澤,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布绢涡,位于F島的核電站廷没,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏垂寥。R本人自食惡果不足惜颠黎,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望滞项。 院中可真熱鬧狭归,春花似錦、人聲如沸文判。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽戏仓。三九已至疚宇,卻和暖如春亡鼠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背敷待。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工间涵, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人榜揖。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓勾哩,卻偏偏與公主長得像,于是被迫代替她去往敵國和親举哟。 傳聞我的和親對象是個殘疾皇子思劳,可洞房花燭夜當晚...
    茶點故事閱讀 44,914評論 2 355

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,133評論 25 707
  • 轉(zhuǎn)載至:http://www.reibang.com/p/9a6845b26856 “Android MVP 詳解...
    SnowDragonYY閱讀 10,322評論 5 241
  • Android App的設(shè)計架構(gòu):MVC,MVP,MVVM與架構(gòu)經(jīng)驗談1. 架構(gòu)設(shè)計的目的1.1 通過設(shè)計使程序模...
    天空在微笑閱讀 4,147評論 1 20
  • 今天讀了一篇文章,名字叫《真正的母愛妨猩,是一場得體的退出》 我犯了很多錯潜叛,我總是對兒子說著這些話:為什么你不聽我的?...
    楓丹白露蘇眉魚閱讀 290評論 0 3
  • “清空你的杯子壶硅,方能再行注滿钠导,空無以求全∩瘢” 李小龍說過:空無以求全!就是說若想學到新的東西,就得先塀棄掉固有的膚...
    約海川閱讀 590評論 1 0