[譯] Android MVP 架構必要知識:第三部分(Dialog,ViewPager,RecyclerView 以及 Adapters)

Android MVP 架構必要知識:第三部分(Dialog,ViewPager,RecyclerView 以及 Adapters)

Android MVP 架構系列文章的第1部分和第2部分自發布以來很是受歡迎,對此我感到很高興。同時也由於大家的建議和貢獻,項目優化得更好了。前端

在這個開發過程當中,許多人詢問過如何在這個架構中使用 Dialog 以及基於 Adapter 的視圖。所以,我會在這篇博客中補充這兩點。java

若是你尚未閱讀前面兩篇博客,那麼我會強烈建議在閱讀本文以前閱讀這兩篇博客。下面是博客的連接地址:android

在這篇文章中,我會添加一個評分對話框和 Feed 界面來擴展這個框架。ios

譯者:Feed 指的是 RSS 訂閱源,Feed 百科,下面的譯文中我就直接使用 Feed 或者 RSSgit

上帝存在於細節之中github

咱們先看下效果圖:編程

評分對話框

  1. 評分對話框顯示 5 個星星,用戶能夠根據本身的滿意度來選擇星星的個數。
  2. 若是星星數量小於 5,咱們將會修改對話框來顯示一個反饋表單,用來詢問用戶的改進建議。
  3. 若是星星個數爲 5。咱們就在對話框中顯示一個跳轉到應用商城(這裏指的是 google play)的選項。用戶能夠在那裏進行評論。
  4. 評分信息會發送到應用的後臺服務端。

注意:從用戶的角度來看評分對話框並非必須的,可是對咱們開發者來講卻很重要。因此,應用須要很巧妙地設計這個執行流程。後端

我建議把對話框裏面相鄰控件的間距調大點。瀏覽器

Feed 界面

  1. 這個界面會有兩個子界面。
  2. 子界面 1:博客 RSS 的列表界面。
  3. 子界面 2:開源代碼 RSS 的列表界面。

博客 RSS 子界面

  1. 從服務器獲取數據。
  2. 用數據填充 RecyclerView 中的 CardView

開源項目 RSS 子界面

  1. 從服務器獲取倉庫數據。
  2. 這些倉庫數據用來填充 RecyclerView 裏面的 CardView

如今,咱們明確了業務需求,接下來就是根據這些需求來擴展已有的架構。服務器

我不會把整個代碼片斷都貼在這裏,由於它太長了。而是在瀏覽器的新標籤中打開這個 MVP 項目。後面咱們就在這兩個標籤中來回切換。

概述:

添加如下幾個類

(在項目com.mindorks.framework.mvp.ui.base 包裏面查看代碼 )

  1. BaseDialog:這個類裏面咱們添加 Dialog 的模板代碼,以及一些通用的方法。實際項目用到的 Dialog 能夠經過擴展該基類來實現。
  2. DialogMvpView:這個接口定義了 PresenterDialogs 交互的API。
  3. BaseViewHolder:它定義了 RecyclerView 綁定框架,並實現了 ViewHolder 被複用時自動清理視圖的功能。
public abstract class BaseDialog extends DialogFragment implements DialogMvpView 複製代碼

關於框架的一點說明。

全部相關的功能應該組合在一塊兒,我稱之爲功能點的封裝,使他們相互獨立。

評分對話框:

  1. 能夠經過左側抽屜的菜單列表打開這個對話框。
  2. 它的實現和第二篇博客裏面的 MVP 組件很類似。

在你瀏覽器的新標籤中打開project repo,完全研究評分對話框部分在項目中的實現

關於對話框的一點說明

有些應用可能會用到不少小對話框,對於這種狀況咱們能夠建立通用的 mvpviewmvppresenterpresenter 給這些對話框使用。

Feed 部分:

  1. 這個包裏面包含了 FeedActivity 和它的 MVP 組件,FeedPagerAdapterblog 包以及 opensource 包。
  2. blog: 這個包裏面有 BlogFragment 和它的 MVP 組件以及 RecyclerViewBlogAdapter
  3. opensource: 這個包裏面有 OpenSourceFragment 和它的 MVP 組件以及 RecyclerViewOpenSourceAdapter
  4. FragmentStatePagerAdapter 用於建立 BlogFragmentOpenSourceFragment

永遠不要在任何 Adapter 類裏面實例化任何對象,或者使用 new 操做符生成對象。請經過 dagger 注入來獲取它們。

OpenSourceAdapterBlogAdapterRecyclerView.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 :)


掘金翻譯計劃 是一個翻譯優質互聯網技術文章的社區,文章來源爲 掘金 上的英文分享文章。內容覆蓋 AndroidiOS前端後端區塊鏈產品設計人工智能等領域,想要查看更多優質譯文請持續關注 掘金翻譯計劃官方微博知乎專欄

相關文章
相關標籤/搜索