[译] Android MVP 架构必要知识:第三部分(Dialog,ViewPager,RecyclerView 以及 Adapters)

10,499 阅读5分钟

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

Android MVP 架构系列文章的第1部分和第2部分自发布以来非常受欢迎,对此我感到很高兴。同时也因为你们的建议和贡献,项目优化得更好了。

在这个开发过程中,许多人询问过如何在这个架构中使用 Dialog 以及基于 Adapter 的视图。因此,我会在这篇博客中补充这两点。

如果你还没有阅读前面两篇博客,那么我会强烈建议在阅读本文之前阅读这两篇博客。下面是博客的链接地址:

在这篇文章中,我会添加一个评分对话框和 Feed 界面来扩展这个框架。

译者:Feed 指的是 RSS 订阅源,Feed 百科,下面的译文中我就直接使用 Feed 或者 RSS

上帝存在于细节之中

我们先看下效果图:

评分对话框

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