[译] 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前端后端区块链产品设计人工智能等领域,想要查看更多优质译文请持续关注 掘金翻译计划官方微博知乎专栏

相关文章
相关标签/搜索