文章预览
Android MVP 架构必要知识:第三部分(Dialog,ViewPager,RecyclerView 以及 Adapters)
Android MVP 架构系列文章的第1部分和第2部分自发布以来非常受欢迎,对此我感到很高兴。同时也因为你们的建议和贡献,项目优化得更好了。
在这个开发过程中,许多人询问过如何在这个架构中使用 Dialog
以及基于 Adapter
的视图。因此,我会在这篇博客中补充这两点。
如果你还没有阅读前面两篇博客,那么我会强烈建议在阅读本文之前阅读这两篇博客。下面是博客的链接地址:
在这篇文章中,我会添加一个评分对话框和 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
给这些对话框使用。
- 这个包里面包含了
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、前端、后端、区块链、产品、设计、人工智能等领域,想要查看更多优质译文请持续关注 掘金翻译计划、官方微博、知乎专栏。
………………………………