當前位置:首頁 » 範本前言 » androidmvp代碼範例
擴展閱讀
中國網路原創新人樂團 2021-03-31 20:26:56
黨政視頻素材 2021-03-31 20:25:44
廈門大學統計學碩士 2021-03-31 20:25:36

androidmvp代碼範例

發布時間: 2021-03-25 00:56:08

⑴ Android MVP模式中,一個Activity對應多個Presenter時該怎樣抽象

View 和 Presenter 之間是有協議約束的.
假設現有V1, P1, V2, P2, 一個ActivityA對應了P1/P2的功能, 也應該說明它實現了V1/V2介面, 此時應該有PresenterA 實現了P1, P2. 這就是完整的VP的協議就對上了.
這里既然多個頁面可能用到同樣的功能, 最簡單的方式節點使用多繼承(一個Persenter實現ABCD四個介面), 這樣不管Activity實際上用的都是同一個Persenter.如果確定現在已經有實現了, 按樓上的方法實現一個代理就可以了.

實在要實現多個Presenter的話, 可以定義幾個不同的類, 來支持不同多個Presenter的擴展:

class BaseMvpActivity1<P> extent BaseActivity {
P presenter;
}
class BaseMvpActivity2<P1, P2> extent BaseActivity {
P1 presenter1;
P2 presenter2;
}

但不推薦這樣做(失去抽象, 違反依賴倒置原則); 更不推薦使用數組或List(基類使用泛型方便編譯器檢查, 數組或List在具體使用時需要做類型的強轉)

⑵ Android MVP架構中的Presentation層應該怎麼設計

先區分一下Android View、View、界面的區別
Android View: 只是繼承android.view.View的Android組件。
View:介面,用於由presenter向View實現類通信,你可以在Android組件中實現它。有時最好直接使用Activity,Fragment或自定義View。
界面:界面是面向用戶的概念。比如要在手機上進行界面間切換時,我們在代碼中可以通過多種方式實現,如Activity到Activity或一個Activity內部的Fragment/View進行切換。所以這個概念基於用戶的視覺,包括了所有View中能看到的東西。
切換界面
界面間的切換可以是兩個Fragment、兩個Activity、打開對話框、啟動新Activity等等。當然切換的具體實現原理不屬於這篇文章的內容,而進行切換操作則是Presentation層的職責。Presenter應該知道要做什麼,而它的實現類要知道怎麼完成。在這個例子中,要做的就是切換界面,完成方式就是啟動新的Activity。
但這樣會有一個問題。Presentation層是純java代碼,所以Presenter中不應該有任何與安卓相關的代碼。那怎麼完成界面的切換呢?通過抽象。這里可以寫一個只有一個navigate()方法的介面NavigationCommand。在需要時我們在Presenter中調用這個介面的navigate()方法,然後在Activity中實現這個介面。
代碼長這樣:
View層
ActivityA.java
public class ActivityA extends Activity {
@OnClick(R.id.someButton)
public void onSomeButtonClicked() {
presenter.onSomeButtonClicked();

}
ToActivityB.java
public class ToActivityB implements NavigationCommand {
private final Activity currentActivity;

public ToActivityB(Activity activity) {
currentActivity = activity;
}

@Override
public void navigate() {
currentActivity.startActivity();
}

}
Presentation層
NavigationCommand.interface
public interface NavigationCommand {
public void navigate();

}
PresenterA.java
public class PresenterA {
private final NavigationCommand toBNavigation;

public PresenterA(NavigationCommand toBNavigation) {
this.toBNavigation = toBNavigation;
}

public void onSomeButtonClicked() {
toBNavigation.navigate();
}

}
這樣我們就可以將VP兩層解耦。這里將切換到一個Activity的代碼提取出來,可以復用,我們可以通過注入NavigationCommand方法來測試Presenter,而且就算要跳轉的頁面變了,Presenter的代碼也不變。這也符合Open Close原則。
另一個問題就是當一個Presenter中出現多個NavigationCommand時,構造方法就開始變得詭異了。
public class PresenterA {
private final NavigationCommand toBNavigation;
private final NavigationCommand toCNavigation;

public PresenterA(NavigationCommand toBNavigation, NavigationCommand toCNavigation) {
this.toBNavigation = toBNavigation;
this.toCNavigation = toCNavigation;
}

}
在這里初始化Presenter的類很難搞清楚兩個NavigationCommand之間的順序,似乎只能通過名字來辨識,這里其實可以再寫一個介面繼承NavigationCommand來專門管理一類特定的切換,或者如果你使用依賴注入框架的話也可以指定參數的類型。
有時需要在切換界面時傳遞一些參數,這時就要改動一下NavigationCommand的代碼:
public interface ToScreenBNavigationCommand extends NavigationCommand {

void setMyParameterToNavigate(String parameter);

}

⑶ Android MVP 開發模式有哪些優缺點

MVP概念:

MVP(Model-View-Presenter) 是總所周知MVC模式的一個演變,主要目的都是劃分模塊職責,降低模塊耦合,易測試,提高代碼復用。

  • 層級責任

  1. Model:負責數據的檢索,持久化等操作。

  2. View: 負責UI的繪制和用戶的交互。

  3. Presenter: 作為Model和View的中間協調部分,負責兩者之間的業務邏輯處理。

  • MVC模式的區別

  1. MVC模式允許View層和Model層直接通訊。

  2. 當某個View的功能很復雜的時候,View和Model的耦合度可能會很高。

  3. MVP模式就沒有這個問題,View會抽象出來一系列操作UI的介面。

  4. Presenter拿到的都是其他兩個層級的介面來做業務邏輯的處理,這樣不僅可以使View和Model之間的耦合度降低,還可以更易得進行單元測試。

  • MVP的優缺點

  1. 優點:降低耦合,層級職責更明顯,易於單元測試。

  2. 缺點:造成類數量爆炸,代碼復雜度和學習成本高,在某些場景下presenter的復用會產生介面冗餘。

⑷ 如何理解android mvp模式中的interactor

Presenter起到的其實就是一個粘合劑的角色。

它調度了UI邏輯和數據邏輯,然而UI邏輯和數據邏輯的具體實現,Presenter是不用關心的,只需要處理好如何調度,和狀態處理即可。

理解這個之前,你需要理解Model 和 ViewModel,一個Model也就是我們平常說的JavaBean,例如一個User類,它有自己的基本屬性。姓名,年齡,用戶名,密碼等等。

而ViewModel代表的是視圖的Model,例如一個登陸視圖,它的ViewModel包含用戶名,密碼。

所以Model是不能直接被視圖使用的,我們需要轉換成ViewModel的形式,然後綁定到視圖上。

你可能會說,我也可以直接綁定Model的屬性到View上,但是這樣View和Model就不是相互獨立的了,也就違背了我們使用MVP、MVVM的初衷。

Interactor的作用實際上就是獲取Model(從本地資料庫,或者是伺服器),轉換成ViewModel,回調通知把ViewModel傳遞給Presenter。

Presenter實現了Interactor的回調介面,可以接收到ViewModel的實例,此時它在回調函數裡面只需要將接收到的ViewModel綁定的View上面即可。

可以看到,在這個過程中Presenter並沒有觸及到具體的實現,只是把View 和 ViewModel進行了綁定而已。

當然你也可以把數據邏輯寫在Presenter,但是Interactor就不存在了,其實Interactor也是可以重用的

作者:面條
鏈接:http://www.hu.com/question/38528132/answer/77390722
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請註明出處。

⑸ 如何實現自己的Android MVP框架

實現Android MVP框架
一個經典的 Android MVC 框架項目的代碼結構

MVP減負activity ,承擔了 view 層和 controller 層的工作

View 層的 ActivityActivity 里包含: View 層的對外介面 MainView, P層 Presenter
對外介面 MainView 文件

P層代碼

文件
DataManager.java

TaskDataSource.java

TaskDataSourceImpl.java

TaskDataSourceTestImpl.java

Android 版方案
通過新建子線程進行IO讀寫獲取數據
以主線程的 Looper 將結果通過傳回主線程進行渲染和展示。

⑹ android mvp adapter該怎麼寫

adapter一般叫適配器,所以顧名思義,它是根據不同數據模型來適配出不同的數據展示效果,而自身不需要進行相應的修改操作。
mvp 分別是 model view controller ,個人感覺adapter應該歸到controller這個部分合適。

⑺ 如何一步一步實現Android的MVP框架

實現Android MVP框架

一個經典的 Android MVC 框架項目的代碼結構

⑻ 如何一步一步實現Android的MVP框架

實現Android MVP框架一個經典的 Android MVC 框架項目的代碼結構

MVP減負activity ,承擔了 view 層和 controller 層的工作

View 層的 ActivityActivity 里包含: View 層的對外介面 MainView, P層 Presenter對外介面 MainView 文件

P層代碼

文件

DataManager.java

TaskDataSource.java

TaskDataSourceImpl.java

TaskDataSourceTestImpl.java

Android 版方案通過新建子線程進行IO讀寫獲取數據
以主線程的 Looper 將結果通過傳回主線程進行渲染和展示。

⑼ android mvp mvvm怎麼選擇 簡書

1.MVC
傳統的Android App其實都是基於MVC的,Activity,Fragment相當於C,布局相當於V,數據邏輯相當於M
隨著業務的增長Controller里的代碼會越來越臃腫,因為它不只要負責業務邏輯,還要控制View的展示。也就是說Activity、Fragment雜糅了Controller和View,耦合變大。並不能算作真正意義上的MVC。
這也是為什麼後面的MVP會引起很多開發者興趣的原因了。
2.MVP
MVP架構其實可以說與MVC的架構還是有很大的差別的,數據邏輯相當於M,Activity(負責View的繪制以及與用戶交互)相當於V ,View於Model間的交互則為P
理論上感覺區別有點抽象,可以通過下面的圖來看一看其中的區別

⑽ 如何實現自己的Android MVP框架

實現Android MVP框架

一個經典的 Android MVC 框架項目的代碼結構