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);

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




目录
相关文章
|
1月前
|
开发框架 前端开发 Android开发
Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势
本文深入探讨了 Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势。这对于实现高效的跨平台移动应用开发具有重要指导意义。
175 4
|
24天前
|
JSON Java API
探索安卓开发:打造你的首个天气应用
在这篇技术指南中,我们将一起潜入安卓开发的海洋,学习如何从零开始构建一个简单的天气应用。通过这个实践项目,你将掌握安卓开发的核心概念、界面设计、网络编程以及数据解析等技能。无论你是初学者还是有一定基础的开发者,这篇文章都将为你提供一个清晰的路线图和实用的代码示例,帮助你在安卓开发的道路上迈出坚实的一步。让我们一起开始这段旅程,打造属于你自己的第一个安卓应用吧!
52 14
|
27天前
|
Java Linux 数据库
探索安卓开发:打造你的第一款应用
在数字时代的浪潮中,每个人都有机会成为创意的实现者。本文将带你走进安卓开发的奇妙世界,通过浅显易懂的语言和实际代码示例,引导你从零开始构建自己的第一款安卓应用。无论你是编程新手还是希望拓展技术的开发者,这篇文章都将为你打开一扇门,让你的创意和技术一起飞扬。
|
25天前
|
搜索推荐 前端开发 测试技术
打造个性化安卓应用:从设计到开发的全面指南
在这个数字时代,拥有一个定制的移动应用不仅是一种趋势,更是个人或企业品牌的重要延伸。本文将引导你通过一系列简单易懂的步骤,从构思你的应用理念开始,直至实现一个功能齐全的安卓应用。无论你是编程新手还是希望拓展技能的开发者,这篇文章都将为你提供必要的工具和知识,帮助你将创意转化为现实。
|
25天前
|
Java Android开发 开发者
探索安卓开发:构建你的第一个“Hello World”应用
在安卓开发的浩瀚海洋中,每个新手都渴望扬帆起航。本文将作为你的指南针,引领你通过创建一个简单的“Hello World”应用,迈出安卓开发的第一步。我们将一起搭建开发环境、了解基本概念,并编写第一行代码。就像印度圣雄甘地所说:“你必须成为你希望在世界上看到的改变。”让我们一起开始这段旅程,成为我们想要见到的开发者吧!
34 0
|
1月前
|
开发框架 Dart Android开发
安卓与iOS的跨平台开发:Flutter框架深度解析
在移动应用开发的海洋中,Flutter作为一艘灵活的帆船,正引领着开发者们驶向跨平台开发的新纪元。本文将揭开Flutter神秘的面纱,从其架构到核心特性,再到实际应用案例,我们将一同探索这个由谷歌打造的开源UI工具包如何让安卓与iOS应用开发变得更加高效而统一。你将看到,借助Flutter,打造精美、高性能的应用不再是难题,而是变成了一场创造性的旅程。
|
Android开发 数据格式 XML
Android异步加载图片详解之方式二(3)
main.xml如下:   listviewitem.xml如下:   ...
819 0
|
缓存 Java Android开发
Android异步加载图片详解之方式二(2)
FileCache.java如下: package com.cn.loadImages; import java.io.File; import java.
900 0
|
Android开发
Android异步加载图片详解之方式二(1)
MainActivity.java如下: package com.cn.perfectlistview; import java.util.ArrayList; import android.
901 0
|
Android开发 数据格式 XML
Android异步加载图片详解之方式一(4)
main.xml如下: listviewitem.xml如下:  
812 0