google-android-mvp例子簡析

google-android-mvp例子簡析

我今天要分析的是google在github上提供的使用mvp的例子。項目的源代碼傳送門

代碼的編寫工具是Android studio 沒有該工具的同學可以點擊androidtool或者google develaper(這個需要科學上網)去下載。

好了開始正題,項目clone下來先在模擬器上運行看看實現的效果

主頁面

我就從這個主頁面上分析如何使用mvp模式進行設計的,其他界面的實現方式類似,源碼的的包的組織模式不是我們平常通過功能進行區分的,源碼的包的組織形式主要是把不同Activity的實現組成一個包,其中主頁面的包結構如下圖:

主頁面的包內容

其中ScrollChildSwipeRefreshLayout和TaskFilterType與mvp的關係不大,ScrollChildSwipeRefreshLayout這是一個自定義的view,用來完成下拉刷新的功能,TasksFilterType是定義數據的狀態的枚舉。

google把p和v的接口方法寫在了TaskContract這個接口中:

public interface TasksContract {
    interface View extends BaseView<Presenter> {...}
     interface Presenter extends BasePresenter {...}

在View這個接口除了繼承了BaseView這個接口的
void setPresenter(T presenter);方法外定義了一系列的show方法用於控制界面的展示。

在Presenter這個接口除了繼承BasePresenter這個接口的
void start();方法外還定義了一系列的控制方法。就個人對對於這些接口方法的理解而言,在View這個接口中主要是控制小範圍的界面變化,而Presenter這個接口中的方法主要針對用戶的操作,比如點擊toolbar上的item。

在TestsActivity中除了完成Presenter、toolbar、DrawerLayout等的初始化之外沒有任何其他的業務邏輯控制。(嗯,Activity中的代碼看起來賊清爽),主要的界面變化放在了Fragment中進行了實現(這也是google推薦的實現方式)。TasksFragment實現了TasksContract.View這個接口的所有方法,並通過setPresenter方法設置TasksContract.Presenter的實現類,之後就可以愉快的在控件的xxxClickListener方法中調用Presenter中的各種方法了。TasksPresenter是TasksContract.Presenter的實現類,在實例化這個類的時候把TasksContract.View接口的實現類傳入。並通過調用View接口的
setPresenter方法完成Presenter和View之間的綁定,因爲TasksContract.View的實現類是作爲構造參數傳入的,因此,在Presenter的實現方法可以通過調用TasksConContract.View的實現類的各種界面展示方法來完成與用戶的交互。很好的做到了界面控制和交互之間的解耦。

恩,這個源碼大體就是這樣,如果還有不太明白的可以通過查看項目, 結合運行效果進行同步理解。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章