〔译〕Android-MVP架构必要知识:第3部分
【译】Android MVP 架构必要知识:第3部分(Dialog,ViewPager,RecyclerView和Adapters)
相关文章:
译文:
原文:
- Essential Guide For Designing Your Android App Architecture: MVP: Part 1
- Essential Guide For Designing Your Android App Architecture: MVP: Part 2
- Essential Guide For Designing Your Android App Architecture: MVP: Part 3 (Dialog, ViewPager…
- Android MVP Architecture Extension with Interactors and Repositories 这看起来又像一篇不错的文章。
翻译的比较差,部分句子还没翻译出来。
让我非常高兴的是,本系列文章的第一部分和第二部分创建的基于MVP架构的项目非常受欢迎,在Github上获得了很多人的关注。
在这此期间,很多人寻求在这个架构中实现对话框和适配器的所需的基本视图。所以,我写了这篇文章来介绍它们。
如果你没有阅读过前两篇文章那么我强烈建议你去阅读。下面是它们的链接:
- Essential Guide For Designing Your Android App Architecture: MVP: Part 1
- Essential Guide For Designing Your Android App Architecture: MVP: Part 2
- 这是项目地址:MindorksOpenSource/android-mvp-architectureandroid-mvp-architecture
在本文中,我们将通过添加 rating dialog 和 feed Activity来扩展架构。
Beauty lies in precision.
让我们先列出其所有特性和用例:
评分对话框
- 评分对话框将展示5颗星以供用户选择他的应用体验。
- 如果 stars < 5,对话框中将会出现一个反馈表单来向用户询问改进之处。
- 如果 stars = 5,对话框中将会显示Google Play商店的评分选项,让用户在那里添加评论。
- 评级信息将发送到应用的后台服务器中。
注意:评分对话框在这里并不是用户需要的,但从开发者的角度来看是非常有价值的。所以,应用程序非常微妙地利用了评分这个需求。
I recommend using large spaced intervals between two consecutive programmatically rating dialog display.
feed Activity
- 此活动将显示两个标签页
- 标签1:博客信息标签页
- 标签2:开源信息标签页
博客信息标签页
- 它将从服务器API获取博客数据。
- 博客数据将以卡片的形式填充到RecyclerView中。
开源信息标签页
- 它将从服务器API获取开源仓库数据。
- 仓库数据将以卡片的形式填充到RecyclerView中。
现在我们已经定义了我们的功能列表和用例,接下来我们来绘制它们的实现架构。
我不会在这里添加整个类代码片段,因为它太长阻碍了视野。我们可以这样做,在浏览器的另一个选项卡中打开该MVP项目 然后在它们之间切换。
草图:
我们将添加下面这些基类
(见项目中的 com.mindorks.framework.mvp.ui.base
package)
- BaseDialog:这可以处理大多数样板,并为实际的对话框添加常用功能。
- DialogMvpView:该界面定义了Presenter类与对话框进行交互的API。
- BaseViewHolder:它定义了RecyclerView绑定的框架,并在ViewHolder被回收时自动清除视图。
public abstract class BaseDialog extends DialogFragment implements DialogMvpView
架构的注意事项:
所有相关功能都应该分组在一起使它们彼此独立,我称之为封装功能。
RateUs对话框:
- 可以通过抽屉导航打开对话框。
- 它的实现和本系列的第2篇文章中看到的任何MVP视图组件都类似。
切换到浏览器的下一个标签页,并彻底研究它在项目中的实现。
对话框的注意事项:
有时可能会出现许多小型对话框的情况,那么我们可以为它们创建一个通用的mvpview,mvppresenter和Presenter。
Feed:
- 该package包含FeedActivity和它的MVP组件,FeedPagerAdapter;还有blog 和 opensource 两个子package。
- blog:这个package包含了BlogFragment和它的MVP组件,还有用于RecyclerView的BlogAdapter。
- opensource:此package包含OpenSourceFragment和它的MVP组件,还有用于RecyclerView的OpenSourceAdapter。
- FragmentStatePagerAdapter是用于BlogFragment和OpenSourceFragment。
不要在任何适配器中实例化任何类,否则使用
new
操作符而不是通过模块作为依赖来提供它们。Never instantiate any class in any Adapter or else where using
new
operator instead provide them through modules as a dependency.
OpenSourceAdapter和BlogAdapter实现了RecyclerView.Adapter<BaseViewHolder>
。在没有数据可用的情况下,将显示一个空视图,来强制用户重试,直到获取到数据才被移除。
API数据分页和网络状态处理将作为一个练习。
现在是研究该项目代码时候了,请专注于代码中的该部分内容的编码方式以及如何在XML中定义视图。
如果您发现任何困难或需要任何解释或改进,请加入mindorks社区并在此提出问题:点击此处 成为Mindorks的Android社区的一部分,并相互学习。