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

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

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

平常,我们可能会遇到这样的需求:在一个页面中用来展示图片或者文字(我们称之为"大湿胸"),而另一个页面除了和大湿胸长得一模一样之外,它还有一个功能是选择(我们称之为"二湿弟"),遇到这种情况你会怎么做呢?当类似于这样的情况在你的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);

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




目录
相关文章
|
存储 Android开发
如何查看Flutter应用在Android设备上已被撤销的权限?
如何查看Flutter应用在Android设备上已被撤销的权限?
653 64
|
12月前
|
Android开发
Android护眼模式(argb)
这是一篇关于实现护眼模式的技术文章。通过动态添加一个透明的帧布局(FrameLayout),并设置其不可触碰、不可聚焦,覆盖在应用界面之上。利用 `Color.argb()` 方法设置带有透明度的背景色,提供两种流行护眼色(浅绿和深绿)。开启护眼模式时,为帧布局设置计算好的颜色;关闭时恢复透明。若需全局生效,可在 BaseActivity 中初始化并调用相关方法。此方案简单高效,适合快速集成护眼功能。
475 1
|
前端开发 Java 编译器
当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
525 36
当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
|
前端开发 Java Shell
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
921 20
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
NoSQL 应用服务中间件 PHP
布谷一对一直播源码android版环境配置流程及功能明细
部署需基于 CentOS 7.9 系统,硬盘不低于 40G,使用宝塔面板安装环境,包括 PHP 7.3(含 Redis、Fileinfo 扩展)、Nginx、MySQL 5.6、Redis 和最新 Composer。Swoole 扩展需按步骤配置。2021.08.05 后部署需将站点目录设为 public 并用 ThinkPHP 伪静态。开发环境建议 Windows 操作系统与最新 Android Studio,基础配置涉及 APP 名称修改、接口域名更换、包名调整及第三方登录分享(如 QQ、微信)的配置,同时需完成阿里云与腾讯云相关设置。
|
Dart 前端开发 Android开发
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
471 4
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
JSON Java API
探索安卓开发:打造你的首个天气应用
在这篇技术指南中,我们将一起潜入安卓开发的海洋,学习如何从零开始构建一个简单的天气应用。通过这个实践项目,你将掌握安卓开发的核心概念、界面设计、网络编程以及数据解析等技能。无论你是初学者还是有一定基础的开发者,这篇文章都将为你提供一个清晰的路线图和实用的代码示例,帮助你在安卓开发的道路上迈出坚实的一步。让我们一起开始这段旅程,打造属于你自己的第一个安卓应用吧!
402 14
|
Android开发
【Android 插件化】“ 插桩式 “ 插件化框架 ( 运行应用 | 代码整理 )
【Android 插件化】“ 插桩式 “ 插件化框架 ( 运行应用 | 代码整理 )
328 0
【Android 插件化】“ 插桩式 “ 插件化框架 ( 运行应用 | 代码整理 )
|
Android开发
【Android 插件化】“ 插桩式 “ 插件化框架 ( 运行应用 | 代码整理 )(二)
【Android 插件化】“ 插桩式 “ 插件化框架 ( 运行应用 | 代码整理 )(二)
240 0
【Android 插件化】“ 插桩式 “ 插件化框架 ( 运行应用 | 代码整理 )(二)
|
Android开发
【Android 插件化】“ 插桩式 “ 插件化框架 ( 运行应用 | 代码整理 )(三)
【Android 插件化】“ 插桩式 “ 插件化框架 ( 运行应用 | 代码整理 )(三)
347 0

热门文章

最新文章