關于Android開發的MVP模式,P層對V層的處理?
項目中采用了MVP模式進行開發,在搭建框架的時候,由于用到了RxJava+Retrofit進行網絡請求,M層不好做封裝,所以網絡請求統一在Preseter層發送,包括請求回調。
現在我想在所有網絡請求過程中顯示進度條,請求結束關閉進度條,但是BasePresenter中又沒有context傳給進度條用來顯示,應該怎么設計?一<愛尬聊_尬聊生活>定要把BaseActivity傳入BasePresenter嗎?
ps.進度條當然可以在每個請求發起和結束回調中處理,但是每個請求都這樣做顯然很麻煩。我就想統一做一些View(V層)的處理,MVP模式貌似在這方面并不好實現
王曦曦Sophia 15小時前
你可以繼承Subscriber寫一個訂閱者,通過構造方法傳遞一個Context進去,然后分別在onStart里面顯示一個進度條,onComplete和onError里關閉進度條,至于如何顯示和關閉,可以通過Handler來做。看到你的問題我想起來之前看到過類似問題的解決方法,給你找了下,在這里https://github.com/tough1985/... 當然你可以在自定義你想要的進度條或者進度條對話框,通過Handler發送消息去顯示和隱藏。
360U671406745 14小時前
一定要把BaseActivity傳入BasePresenter嗎?這樣就成了MVC了.
360U3377483222 14小時前
我找到一個方法分享給大家:1、首先創建BasePresenter和BaseView(接口),所有的Presenter和view都繼承Base,然后BaseView中聲明公用方法比如createProgressDialog和closeProgressDialog。2、然后BasePresenter定義一個帶BaseView參數的構造函數,這樣你的每一個presenter由于都繼承了BasePresenter,所以都必須實現一個帶BaseView參數的構造函數,并且構造函數里面有super方法。這樣就在實例化自己的presenter時傳入了BaseView給BasePresenter。3、最后BaseActivity中實現BaseView接口的方法供BasePresenter調用。這樣做不用傳遞Context上下文,也不用再presenter中直接進行UI操作,而是通過在Base層建立View和Presenter關聯實現UI和業務邏輯隔離,更加符合MVP架構的思想
喵喵大人要注冊 14小時前
進度可以同樣注冊成接口回調就行了. 如果不能直接到UI線程回調, 那么就用hander轉發.
360U3377483222 14小時前
為什么不能把進度條的進度理解為一個Model里的值呢?Presenter更新這個用于進度條的Model,而View根據這個Model去繪制進度條的長度,這不就和普通的拉取數據,裝入模型,交給View顯示一個道理嘛!
