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

Landroid發表於2018-01-01

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

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

Android MVP 架構系列文章的第1部分和第2部分自發布以來非常受歡迎,對此我感到很高興。同時也因為你們的建議和貢獻,專案優化得更好了。

在這個開發過程中,許多人詢問過如何在這個架構中使用 Dialog 以及基於 Adapter 的檢視。因此,我會在這篇部落格中補充這兩點。

如果你還沒有閱讀前面兩篇部落格,那麼我會強烈建議在閱讀本文之前閱讀這兩篇部落格。下面是部落格的連結地址:

在這篇文章中,我會新增一個評分對話方塊和 Feed 介面來擴充套件這個框架。

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

上帝存在於細節之中

我們先看下效果圖:

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

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

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

評分對話方塊

  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前端後端區塊鏈產品設計人工智慧等領域,想要檢視更多優質譯文請持續關注 掘金翻譯計劃官方微博知乎專欄

相關文章