Android MVP 架構必要知識:第三部分(Dialog,ViewPager,RecyclerView 以及 Adapters)
Android MVP 架構系列文章的第1部分和第2部分自發布以來非常受歡迎,對此我感到很高興。同時也因為你們的建議和貢獻,專案優化得更好了。
在這個開發過程中,許多人詢問過如何在這個架構中使用 Dialog
以及基於 Adapter
的檢視。因此,我會在這篇部落格中補充這兩點。
如果你還沒有閱讀前面兩篇部落格,那麼我會強烈建議在閱讀本文之前閱讀這兩篇部落格。下面是部落格的連結地址:
- [譯] Android MVP 架構必要知識:第一部分
- [譯] Android MVP 架構必要知識:第二部分
- MindorksOpenSource/android-mvp-architecture 倉庫裡面有實現該框架完整的示例程式碼
在這篇文章中,我會新增一個評分對話方塊和 Feed
介面來擴充套件這個框架。
譯者:
Feed
指的是RSS
訂閱源,Feed 百科,下面的譯文中我就直接使用Feed
或者RSS
。
上帝存在於細節之中
我們先看下效果圖:
評分對話方塊
- 評分對話方塊顯示 5 個星星,使用者可以根據自己的滿意度來選擇星星的個數。
- 如果星星數量小於 5,我們將會修改對話方塊來顯示一個反饋表單,用來詢問使用者的改進建議。
- 如果星星個數為 5。我們就在對話方塊中顯示一個跳轉到應用商城(這裡指的是
google play
)的選項。使用者可以在那裡進行評論。 - 評分資訊會傳送到應用的後臺服務端。
注意:從使用者的角度來看評分對話方塊並不是必須的,但是對我們開發者來說卻很重要。所以,應用需要很巧妙地設計這個執行流程。
我建議把對話方塊裡面相鄰控制元件的間距調大點。
Feed 介面
- 這個介面會有兩個子介面。
- 子介面 1:部落格
RSS
的列表介面。 - 子介面 2:開原始碼
RSS
的列表介面。
部落格 RSS
子介面
- 從伺服器獲取資料。
- 用資料填充
RecyclerView
中的CardView
。
開源專案 RSS
子介面
- 從伺服器獲取倉庫資料。
- 這些倉庫資料用來填充
RecyclerView
裡面的CardView
。
現在,我們明確了業務需求,接下來就是根據這些需求來擴充套件已有的架構。
我不會把整個程式碼片段都貼在這裡,因為它太長了。而是在瀏覽器的新標籤中開啟這個 MVP 專案。後面我們就在這兩個標籤中來回切換。
概述:
新增以下幾個類
(在專案的 com.mindorks.framework.mvp.ui.base 包裡面檢視程式碼 )
- BaseDialog:這個類裡面我們新增
Dialog
的模板程式碼,以及一些通用的方法。實際專案用到的Dialog
可以通過擴充套件該基類來實現。 - DialogMvpView:這個介面定義了
Presenter
與Dialogs
互動的API。 - BaseViewHolder:它定義了
RecyclerView
繫結框架,並實現了ViewHolder
被複用時自動清理檢視的功能。
public abstract class BaseDialog extends DialogFragment implements DialogMvpView
複製程式碼
關於框架的一點說明。
所有相關的功能應該組合在一起,我稱之為功能點的封裝,使他們相互獨立。
評分對話方塊:
- 可以通過左側抽屜的選單列表開啟這個對話方塊。
- 它的實現和第二篇部落格裡面的
MVP
元件很相似。
在你瀏覽器的新標籤中開啟project repo,徹底研究評分對話方塊部分在專案中的實現
關於對話方塊的一點說明
有些應用可能會用到很多小對話方塊,對於這種情況我們可以建立通用的
mvpview
,mvppresenter
和presenter
給這些對話方塊使用。
Feed 部分:
- 這個包裡面包含了
FeedActivity
和它的MVP
元件,FeedPagerAdapter
,blog
包以及opensource
包。 - blog: 這個包裡面有
BlogFragment
和它的MVP
元件以及RecyclerView
的BlogAdapter
。 - opensource: 這個包裡面有
OpenSourceFragment
和它的MVP
元件以及RecyclerView
的OpenSourceAdapter
。 FragmentStatePagerAdapter
用於建立BlogFragment
和OpenSourceFragment
。
永遠不要在任何
Adapter
類裡面例項化任何物件,或者使用new
操作符生成物件。請通過dagger
注入來獲取它們。
OpenSourceAdapter
和 BlogAdapter
是 RecyclerView.Adapter<BaseViewHolder>
的實現類。在本專案中,當沒有可用資料的時候會顯示一個空檢視。使用者可以點選 RETRY
按鈕來重新獲取資料,並在獲取到資料的時候刪除該空檢視。
API
資料分頁和網路狀態的處理就留給你作為練習。
現在請通過專案來研究程式碼,仔細研究XML中的佈局以及如何通過程式碼操作檢視。
如果您覺得有困難或需要任何幫助或改善,請在 Mindorks
社群提出你的問題:點選這裡加入 Mindorks Android
社群,在這裡我們可以相互學習。
感謝您閱讀這篇文章,如果你覺得這篇文章對你有幫助,別忘了點下面的 ❤ 。這會幫助更多人從這篇文章中學到知識。
如果想獲取更多程式設計知識,在 Medium 上關注我和 Mindorks,這樣你就能在新文章釋出的第一時間收到通知了。
Check out all the Mindorks best articles here.
你也可以通過 Twitter, Linkedin, Github, 和 Facebook 加我好友。
Coder’s Rock :)
掘金翻譯計劃 是一個翻譯優質網際網路技術文章的社群,文章來源為 掘金 上的英文分享文章。內容覆蓋 Android、iOS、前端、後端、區塊鏈、產品、設計、人工智慧等領域,想要檢視更多優質譯文請持續關注 掘金翻譯計劃、官方微博、知乎專欄。