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

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

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

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

先来一张设计概要UML图(高清大图请移步:http://download.csdn.net/detail/u011064099/9277071):

这张图的所展现出的设计使用了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去使用。

使用示例:

class 用于展示网络数据Presenter
{new NetData();//数据的输入来源new RViewAdapter(boolean 是否启动选择功能);new ViewHolder();//最好使用万能适配器new GridLayoutManager();//RecyclerView的布局方式}ShowListImageActivity.startInstance(mContext, SelectLocalPhotoPresenter.class);

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

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

  1. MVP模式在Android中的应用(附UML高清大图,使用RecyclerView举例)

    传了一张图,图比较大,请移步下载:http://download.csdn.net/detail/u011064099/9266245 在看代码之前,首先简单看一下什么是MVP模式:http://ww ...

  2. 梦之鬼索MVP模式在Android中的设计和实现

    想必大家都知道MVC和MVP,MVVM.今天就来探讨一下MVP在安卓中的设计和实现. 首先谈一个需求. 你的boss说,小明去给我写一个程序很简单我提供Person ID 你给我拿出Person的姓名 ...

  3. mvp模式复用android,MVP模式

    简称:MVP 全称:Model-View-Presenter :MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供 ...

  4. MVP模式在Android实际项目中的应用和优化

    注:本文阅读需要对MVP模式有基本了解. MVP模式已经出现有很长一段时间了,但是火起来是这两年的事情. 关于MVP的概览,介绍,乃至于教程,Demo,实例,网上都有很多,我也有一篇文章专门收录了一些 ...

  5. android中的mvp模式怎么定义,详解MVP模式在Android开发中的应用

    一.MVP介绍 随着UI创建技术的功能日益增强,UI层也履行着越来越多的职责.为了更好地细分视图(View)与模型(Model)的功能,让View专注于处理数据的可视化以及与用户的交互,同时让Mode ...

  6. android图片gif动画效果,android中类似于gif 实现图片的动画效果

    案例:实现gif动画效果,连续播放图片 由于是转载的,也就没必要多说,直接上代码 案例:在android中实现gif动态图片的效果: EarthAnimationActivity.java packa ...

  7. android 图像对比,Android中比较两个图片是否一致的问题

    在Fragment界面中,设置两个图片一致如下: 默认设置图片为: binding.ivArrow.setImageResource(R.drawable.icon_down); 先获取默认图片,再和 ...

  8. Android中实现平铺图片

    转载请标明出处:一片枫叶的专栏 最近开发App,美工设计了一个有锯齿边沿效果的背景图,只给了我一个锯齿,然后需要平铺展示锯齿效果: android中实现平铺图片有两种方式: (1)在drawable中 ...

  9. android添加图片按钮,如何给Android中的按钮添加图片功能

    在layout中建一个my_login.xml文件 代码如下 android:layout_width="fill_parent" android:layout_height=&q ...

最新文章

  1. 使用C++基于Socket编程实现文件下载(改进-封装成类)
  2. java 常用接口的实现--compareable
  3. Android开发之自带阴影效果的shape
  4. Git学习教程(二):配置和初始化
  5. deepin10安装docker、docker-compose
  6. sequelize 左连接 left join_SparkSQL连接查询中的谓词下推处理(下)
  7. 风控趋势|隐私计算几大落地场景与三方数据市场
  8. tp3.2 缓存cache
  9. 解决ojdbc14库引用问题
  10. 用jquery编写简易计算器
  11. Delphi 法简介
  12. 2020/03/11美版iPhone卡贴ICCID完美激活!
  13. python——函数
  14. python编程的缩进什么意思_编程缩进是什么意思
  15. 初看SOA:SOA是什么?
  16. Flutter执行flutter pub get过程中遇到的问题
  17. 操作系统第五章 设备管理(上)笔记
  18. 方正微型计算机U210,100款笔记本电脑年度总决赛 超便携篇
  19. 使用kubekey的all-in-one安装K8S1.24及KubeSphere3.3
  20. 推荐windows10里自带的世界时钟,非常好用

热门文章

  1. 周星驰的10个华人记录
  2. AI技术必备资源汇总
  3. 深度玩转神经网络——基于Keras
  4. 干货丨零基础学习大数据,搭建Hadoop处理环境
  5. 人物丨深度学习大神Hinton推翻自己30年的学术成果另造新世界
  6. python每隔2s执行一次hello world!
  7. 2021年14项世界互联网领先科技成果发布
  8. 联结你与万物的8种元素
  9. Facebook爆锤深度度量学习:该领域13年来并无进展!网友:沧海横流,方显英雄本色...
  10. 2020年虚拟现实和增强现实的发展趋势将会如何|0glasses低调分享