为了账号安全,请及时绑定邮箱和手机立即绑定

MVP模式在Android中的应用之图片展示选择功能的框架设计

标签:
Android

前言:虽然安卓出现的时间比其它平台软件比较晚,但是在我们的安卓开发中,一样可以使用我们所熟知的设计模式来给它一个合理、完善的结构,这样,才可以使我们在平常开发的时候减少冗余代码的发生,真正的提高效率。

平常,我们可能会遇到这样的需求:在一个页面中用来展示图片或者文字(我们称之为"大湿胸"),而另一个页面除了和大湿胸长得一模一样之外,它还有一个功能是选择(我们称之为"二湿弟"),遇到这种情况你会怎么做呢?当类似于这样的情况在你的APP中有很多种怎么办呢?你会怎么选择?是一遍遍的拷贝粘贴,还是先静下来想想如何设计它呢?


好,如果你选择的是第一种,可能下面的话就有些不太适合你了,可以直接关闭了。

如果你选择的是第二种,请跟我来,我们一起来看看这个功能该如何设计。

这张图的所展现出的设计使用了MVP模式,即IView为我们的View,AbstIData为我们的Model,Presenter则是Presenter。对于怎么使用它们,这篇文章对它进行了概要说明

好,我来解释一下这张图,我们看到的一整大块的蓝色是包,表示这属于同一系列的东西,从左上角开始看起,这个包被定义为界面,也就是说它只是负责界面的绘制以及响应用户的操作,AbstIData则表示我们的数据包,里面有4项实现类,表示从4中不同的渠道获取数据。我们的核心则是Presenter,它里面定义了我们数据以及界面的组合方式。它们共同继承IConnect接口,用于相互之间的通讯。

为了符合设计原则,我们的抽象标准则放入了与我们实际功能有关的部分,它们是一一对应的:ActivityA集成了RecyclerView,则我们使用的Presenter也是与RecyclerView有关系的,所以它实现了IRecyclerView接口,这个接口中定义了RecyclerView所必须的拥有的要素,以便在实例化的时候可以从外部注入,它为RecyclerPresenter。


为了既有图片展示,又有选择功能,我们的核心所在则是左下角这一块:图片类型适配器这个类它是与图片有关操作的一个抽象类,我们可以继承它,以便可以定义很多种图片的展示效果,在图片类型适配器的内部放置了一个图片选择功能辅助类,它专门用来处理图片选择之类的问题,比如图片的选择与不选择的界面处理,以及获取被选中的结果等等,总之图片的选择功能全部由它来进行操作。它可以使用反射的方式来与适配器内部进行逻辑挂钩,比如对展示布局进行选择控件的添加等等。这里使用了桥梁模式,所以我们的选择样式就不用单独去做了,只用把它们之间的功能组合一下就可以。

中间下部的是我们平常所知道的ViewHolder,每个布局则需要去对应不同的ViewHolder,如果是遇到选择的功能,则可能ViewHolder类的个数要翻一倍了,所以这里最好是使用万能的ViewHolder。右下部分则是我们RecyclerView需要使用的LayoutManager,这里我们在组装Presenter的时候就可以直接对它进行定义。


所以对于我们的图片展示选择的这个例子来说,我们的核心部分是RecyclerPresenter,我们在定义它的子类的时候,会定义一切可自定义的东西,比如:数据来源,数据解析方式,使用什么样的适配器,使用什么样的ViewHolder,使用什么样的LayoutManager,我们需要它们里面进行精妙复杂的组合,最终提供给ActivityA去使用。

使用示例:


[java] view plaincopy

  1. class 用于展示网络数据Presenter  

  2. {  

  3.     new NetData();//数据的输入来源  

  4.     new RViewAdapter(boolean 是否启动选择功能);  

  5.     new ViewHolder();//最好使用万能适配器  

  6.     new GridLayoutManager();//RecyclerView的布局方式  

  7.   

  8. }  

  9.   

  10. ShowListImageActivity.startInstance(mContext, SelectLocalPhotoPresenter.class);  


好,整体的思路就是这样,在实现过程中还有不少需要调整的地方,请大家批评指正。欢迎多多讨论。

原文链接:http://www.apkbus.com/blog-239627-59686.html

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

举报

0/150
提交
取消