- 浏览: 59568 次
- 性别:
- 来自: 北京
-
文章分类
- 全部博客 (218)
- ★★★ Android ★★★ (37)
- 【 Java 基础】✚ (0)
- ☞Java 基础概述 (0)
- ☞Java 基本语法 (0)
- ☞Java 面向对象编程 (0)
- ☞Java多线程 (0)
- ☞Java 异常处理 (0)
- ☞Java 集合框架 (0)
- ☞Java 泛型 (0)
- ☞Java 枚举和注解 (0)
- ☞Java IO流 (0)
- ☞Java 常用类 (0)
- ☞Java GUI键盘事件 (0)
- ☞Java 网络编程 (0)
- ☞Java 正则表达式 (0)
- ☞Java 反射机制 (0)
- ☞Java 小项目 (0)
- ☞Java 面试/笔试题 (0)
- 【HTML5 开发基础】✚ (0)
- ☞HTML常用标签 (0)
- ☞HTML 新特性 (0)
- ☞CSS/CSS3常用语法 (0)
- ☞JavaScript基础语法 (0)
- ☞HTML5 小项目 (0)
- ☞HTML5 面试/笔试题 (0)
- 【Android 基础阶段】✚ (12)
- ☞Android 快速入门 (1)
- ☞Android 核心组件 (1)
- ☞Android Intent (0)
- ☞Android 用户界面 (5)
- ☞Android 数据存储 (0)
- ☞Android Tomcat服务器 (0)
- ☞Android 网络编程 (2)
- ☞Android 消息机制 (0)
- ☞Android 事件机制 (0)
- ☞Fragment和ViewPager (3)
- ☞Android动画与图形处理 (0)
- ☞Android多媒体应用开发 (1)
- ☞Android 传感器开发等 (0)
- ☞Android GPS应用 (0)
- ☞Android C语言 (0)
- ☞Android JNI/NDK开发 (0)
- ☞Android Git/SVN (0)
- ☞Android 小项目 (0)
- ☞Android 面试/笔试题 (0)
- 【Android 微知识点】✚ (7)
- ☞Android 一些模版代码 (0)
- ☞Android 模块功能代码 (0)
- ☞Android UI控件大全 (2)
- ☞Android 自定义适配器 (1)
- ☞Android 自定义属性 (3)
- ☞Android 自定义动画 (0)
- ☞Android 启动过程 (0)
- ☞Android 性能优化 (0)
- ☞Android 图片三级缓存 (0)
- ☞Android 屏幕适配 (0)
- ☞Android OOM内存溢出 (0)
- ☞Android 权限 (0)
- ☞Android JNI (0)
- 【Android 网络编程】✚ (1)
- ☞Android Json解析 (2)
- ☞Android 网络请求 (2)
- 【Android 解析器】✚ (0)
- ☞Android XML (0)
- ☞Android DOM (0)
- ☞Android dom4j (0)
- ● (0)
- ●● (0)
- ●●● (0)
- ●●●● (0)
- ●●●●● (0)
- ●●●●●● (0)
- ●●●●●●● (0)
- ●●●●●●●● (0)
- ●●●●●●●●● (0)
- ☞☞☞☞☞☞☞☞☞☞ (0)
- ☞☞☞☞☞☞☞☞☞ (0)
- ☞☞☞☞☞☞☞☞ (0)
- ☞☞☞☞☞☞☞ (0)
- ☞☞☞☞☞☞ (0)
- ☞☞☞☞☞ (0)
- ☞☞☞☞ (0)
- ☞☞☞ (0)
- ☞☞ (0)
- ☞ (0)
- 【Android重量级框架】✚ (14)
- ☞框架归类 (1)
- ☞Gson (0)
- ☞xUtils3 (2)
- ☞xListView (0)
- ★ Volley (0)
- ★ AndroidAnnotations (0)
- ★ Glide (0)
- ★ SlidingMenu (0)
- ★ TabLayout (1)
- ★ ViewPagerIndicator (4)
- ★ Pulltorefresh (1)
- ★ PhotoView (1)
- ★ EventBus (0)
- ★ Vitamio5.0 (0)
- ★ Image-Loader (1)
- ★ Android-gif-drawable (0)
- ★ ActionBar (0)
- ★ ActionBarSherlock (0)
- ★ OkHttp (0)
- ★ Afinal (2)
- ★ Ffmpeg (0)
- ★ RxJava (0)
- ★ Picasso (0)
- ★ FastJson (0)
- ★ Toolbar (0)
- ★ GreenDao (0)
- ★ Otto (0)
- ★ ORMLite (0)
- ★ Retrofit (0)
- ★ Fresco (0)
- ★ SnappyDB (0)
- ★ Butterknife (0)
- ★ PagerSlidingTabStrip (0)
- PinterestLikeAdapterView (0)
- ★ NotBoringActionBar (0)
- ★ StickyListHeaders (0)
- ★ NineOldAndroids (0)
- ★ Expandablelistview (0)
- ★ SwipeRefreshLayout (0)
- ★ SwipeMenuListView (0)
- ★ (0)
- ★★ (0)
- ★★★ (0)
- ★★★★ (0)
- ★★★★★ (0)
- ★★★★★★ (0)
- ★★★★★★★ (0)
- ★★★★★★★★ (0)
- ★★★★★★★★★ (0)
- ★★★★★★★★★★ (0)
- ❉❉❉❉❉❉❉❉❉❉ (0)
- ❉❉❉❉❉❉❉❉❉ (0)
- ❉❉❉❉❉❉❉❉ (0)
- ❉❉❉❉❉❉❉ (0)
- ❉❉❉❉❉❉ (0)
- ❉❉❉❉❉ (0)
- ❉❉❉❉ (0)
- ❉❉❉ (0)
- ❉❉ (0)
- ❉ (0)
- 【第三方分享库】✚ (0)
- ○○○○○○○○○○ (0)
- ○○○○○○○○○ (0)
- ○○○○○○○○ (0)
- ○○○○○○○ (0)
- ○○○○○○ (0)
- ○○○○○ (0)
- ○○○○ (0)
- ○○○ (0)
- ○○ (0)
- ○ (1)
- 【Android开源项目】✚ (1)
- ☞综合性项目 (0)
- ☞多媒体项目 (1)
- ☞新闻性项目 (2)
- ☞社交性项目 (0)
- ☞商城性项目 (0)
- ☞Android 支付宝 (0)
- ☞Android 第三方登录 (0)
- ☞Android 语音识别 (0)
- ☞Android消息推送 (1)
- ☞Android 蓝牙 (0)
- ☞Android 传感器 (0)
- ☞Android 动画 (0)
- ☞Android 省市县三级联动 (0)
- ☞短信验证技术 (0)
- ☞二维码扫描技术 (0)
- ☂ (0)
- ☂☂ (0)
- ☂☂☂ (0)
- ☂☂☂☂ (0)
- ☂☂☂☂☂ (0)
- ☂☂☂☂☂☂ (0)
- ☂☂☂☂☂☂☂ (0)
- ☂☂☂☂☂☂☂☂ (0)
- ☂☂☂☂☂☂☂☂☂ (0)
- ☂☂☂☂☂☂☂☂☂☂ (0)
- ♣♣♣♣♣♣♣♣♣♣ (0)
- ♣♣♣♣♣♣♣♣♣ (0)
- ♣♣♣♣♣♣♣♣ (0)
- ♣♣♣♣♣♣♣ (0)
- ♣♣♣♣♣♣ (0)
- ♣♣♣♣♣ (0)
- ♣♣♣♣ (0)
- ♣♣♣ (0)
- ♣♣ (0)
- ♣ (0)
- 【Android源码分析】✚ (4)
- 【Android项目阶段】✚ (1)
- ☞Android主流架构搭建 (0)
- ☞综合性<手机安全卫士> (0)
- ☞多媒体<手机影音> (1)
- ☞新闻性<北京新闻> (0)
- ☞社交性<硅谷社交> (0)
- ☞商城性<硅谷商城> (0)
- ☞内涵段子<百思> (0)
- ☞<地图相关开发接口> (0)
- ☞下载<电子应用市场> (0)
- ☞智能<手机遥控家电> (0)
- ☞游戏<植物大战僵尸> (0)
- ☞企业实战<开源中国> (0)
- ☞Android5.0+6.0新特性 (0)
- ☞高级特效专辑 (0)
- ☞项目管理与实施 (0)
- ☞项目经验:面试/笔试题 (0)
- 【Android 前沿技术】✚ (0)
- ☞图文混排技术 (0)
- ☞百分比布局 (0)
- H5混合开发☞ (0)
- ☞APP增量升级 (0)
- ☞软件崩溃收集 (0)
- ☞前沿技术分享 (0)
- 【Android+H5混合开发】✚ (0)
- ☞React基本语法 (0)
- ☞React Native开发环境搭建 (0)
- ☞React Native开发基础 (0)
- ☞React Native常用组件 (0)
- ☞React Native常用API (0)
- ☞豆瓣搜索项目 (0)
- ☏ (0)
- ☏☏ (0)
- ☏☏☏ (0)
- ☏☏☏☏ (0)
- ☏☏☏☏☏ (0)
- ☏☏☏☏☏☏ (0)
- ☏☏☏☏☏☏☏ (0)
- ☏☏☏☏☏☏☏☏ (0)
- ☏☏☏☏☏☏☏☏☏ (0)
- ☏☏☏☏☏☏☏☏☏☏ (0)
- ☎☎☎☎☎☎☎☎☎☎ (0)
- ☎☎☎☎☎☎☎☎☎ (0)
- ☎☎☎☎☎☎☎☎ (0)
- ☎☎☎☎☎☎☎ (0)
- ☎☎☎☎☎☎ (0)
- ☎☎☎☎☎ (0)
- ☎☎☎ (0)
- ☎☎ (0)
- ☎ (0)
- 【Android+H5项目实战】✚ (0)
- 【程序员软件系列】✚ (4)
- ☞Eclipse (0)
- ☞Android Studio (4)
- ☞Genymotion (0)
- ☞Tomcat服务器 (0)
- ☞MyScal (0)
- ☀ (0)
- ☀☀ (0)
- ☀☀☀ (0)
- ☀☀☀☀ (0)
- ☀☀☀☀☀ (0)
- ☀☀☀☀☀☀ (0)
- ☀☀☀☀☀☀☀ (0)
- ☀☀☀☀☀☀☀☀ (0)
- ☀☀☀☀☀☀☀☀☀ (0)
- ☀☀☀☀☀☀☀☀☀☀ (0)
- ☻☻☻☻☻☻☻☻☻☻ (0)
- ☻☻☻☻☻☻☻☻☻ (0)
- ☻☻☻☻☻☻☻☻ (0)
- ☻☻☻☻☻☻☻ (0)
- ☻☻☻☻☻☻ (0)
- ☻☻☻☻☻ (0)
- ☻☻☻☻ (0)
- ☻☻☻ (0)
- ☻☻ (0)
- ☻ (0)
- ♬♬♬ 技术网站 ♬♬♬ (2)
- ◙ (0)
- ◙◙ (0)
- ◙◙◙ (0)
- ◙◙◙◙ (0)
- ◙◙◙◙◙ (0)
- ◘◘◘◘◘ (0)
- ◘◘◘◘ (0)
- ◘◘◘ (0)
- ◘◘ (0)
- ◘ (0)
- 【Android 其他技术】✚ (0)
- ☞Android反编译 (0)
- ☞抓包 (0)
- ☞多渠道打包及软件上线 (0)
- 【github项目/博客系列】✚ (1)
- ☞注册github步骤 (0)
- ☞github项目 (0)
- ☞优秀博客系列 (1)
- 【开发经验分享】✚ (2)
- ☞Android 知识体系 (1)
- ☞项目经验分享 (0)
- ☞面试与就业指导 (1)
- ☞Android面试技术汇总 (2)
- ♬♬♬ 词汇 ♬♬♬ (0)
- 【Android基础单词】✚ (0)
- 【javaSE单词】✚ (0)
- 【个人博客资料】✚ (0)
- 博客链接 (1)
- 快速开发 (1)
- JavaEE面试题 (1)
最新评论
设计模式在android中的应用——适配器模式
原文地址:http://www.eoeandroid.com/thread-228482-1-1.html
适配器模式:
把一个类的接口转换为客户端所期待的另一种接口,从而使原本因接口不匹配而无法再一起工作的两个类能够在一起工作。
又称为:转化器模式、变压器模式或包装模式。
通俗的来说:
就像我们平常给笔记本用的充电器一样,不管外接电源是110V、220V还是360V,经过充电器的转化后,输出给笔记本的都是标准而稳定的12V电压。
如图:
Android API中的应用:
ListView与Adapter的应用就是典型的适配器模式。
如:
//----------------------------------------------------------------------------------------------声明组件 //绑定Layout里面的ListView ListView list = (ListView) findViewById(R.id.ListView01); //----------------------------------------------------------------------------------------------设置数据源 //生成动态数组,加入数据 ArrayList<HashMap<String, Object>> listItem = new ArrayList<HashMap<String, Object>>(); for(int i=0;i<10;i++) { HashMap<String, Object> map = new HashMap<String, Object>(); map.put("ItemImage", R.drawable.checked); map.put("ItemTitle", "Level "+i); listItem.add(map); } //----------------------------------------------------------------------------------------------导入数据源 //生成适配器的Item和动态数组对应的元素 SimpleAdapter adapter = new SimpleAdapter(this,listItem, R.layout.list_items,[size=1em] [size=1em] new String[] {"ItemImage","ItemTitle"}, new int[] {R.id.ItemImage,R.id.ItemTitle,R.id.ItemText} ); //----------------------------------------------------------------------------------------------适配 //添加并且显示 list.setAdapter(adapter);
这是我们在android 开发中常用的构造一个ListView组件的方法,对于大家来说异常的熟悉,不用废话了。
很多人知道这么用,但为什么这么用?这么用的原理是什么?
明白了 “是什么” 和 “为什么” 才是我们走向成熟的标准。
下面就以ListView为样例来剖析一下他的工作原理:
结构如下:
第一步:构建BaseAdapter抽象父类
//----------------------------------------------------------------------------------------------声明组件 //绑定Layout里面的ListView ListView list = (ListView) findViewById(R.id.ListView01); //----------------------------------------------------------------------------------------------设置数据源 //生成动态数组,加入数据 ArrayList<HashMap<String, Object>> listItem = new ArrayList<HashMap<String, Object>>(); for(int i=0;i<10;i++) { HashMap<String, Object> map = new HashMap<String, Object>(); map.put("ItemImage", R.drawable.checked); map.put("ItemTitle", "Level "+i); listItem.add(map); } //----------------------------------------------------------------------------------------------导入数据源 //生成适配器的Item和动态数组对应的元素 SimpleAdapter adapter = new SimpleAdapter(this,listItem, R.layout.list_items,[size=1em] [size=1em] new String[] {"ItemImage","ItemTitle"}, new int[] {R.id.ItemImage,R.id.ItemTitle,R.id.ItemText} ); //----------------------------------------------------------------------------------------------适配 //添加并且显示 list.setAdapter(adapter);
第二步:定义ListView方法的接口IListView
public interface IListView { public void setAdapter(BaseAdapter adapter); }
第三步:ListView组件类
public interface IListView { public void setAdapter(BaseAdapter adapter); }
至此ListView组件已经成型,接下来完成适配器Adapter类
第四步:适配器接口IAdapter
public interface IListView { public void setAdapter(BaseAdapter adapter); }
第五步:生成适配器SimpleAdapter
public class SimpleAdapter extends BaseAdapter implements IAdapter{ ArrayList<HashMap< String,String>> arrayList; String name; public SimpleAdapter(ArrayList<HashMap< String,String>> arrayList,String name) { this.arrayList=arrayList; this.name=name; this.item=new String[arrayList.size()]; setData(); } @Override public void setData() { for(int i=0;i<arrayList.size();i++){ this.item=arrayList.get(i).get(name); } } }
Ok,创建类结束!
应用:
public class SimpleAdapter extends BaseAdapter implements IAdapter{ ArrayList<HashMap< String,String>> arrayList; String name; public SimpleAdapter(ArrayList<HashMap< String,String>> arrayList,String name) { this.arrayList=arrayList; this.name=name; this.item=new String[arrayList.size()]; setData(); } @Override public void setData() { for(int i=0;i<arrayList.size();i++){ this.item=arrayList.get(i).get(name); } } }
--------------------------------------------------------------------------------------------------------------------------------------------------------------
总结:
1.其实样例中的ListView与SimpleAdapter都是继承了抽象父类BaseAdapter,同时ListView又包裹了SimpleAdapter,从而实现了所谓的“适配”。
2.当然Android API中还有ArrayAdapter等其他适配器,不过原理同SimpleAdapter一样,比葫芦画瓢罢了…… ,
这同时也解释了为什么我们在写 “自定义ListView”时为什么要继承父类BaseAdapter!
3.同样的原理,不同的表现方式。
适配器模式设计原则:
1.使用对象组合,面向接口和抽象编程(万年不变)
2.“开闭”原则
使用场合:
1.软件系统结构需要升级或扩展,又不想影响原有的系统的稳定运行的时候;
2.转换类之间的差别不是太大的时候;
3.想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类协同工作时候。
相关推荐
在Android应用开发中,"Android开发三剑客——UML、模式与测试"是指三个关键的组成部分:统一建模语言(UML)、设计模式以及测试方法。这些元素构成了高效、可维护和高质量软件开发的基础。 **UML(统一建模语言)*...
在早期的Android版本中,TabActivity用于实现多标签页的应用界面。它是一个特殊的Activity,允许开发者在一个Activity中展示多个Tab,每个Tab可以包含不同的Fragment或Activity。然而,随着Android设计指南的更新,...
`android.widget`命名空间包含了大量用于构建用户界面的基本UI组件,这些组件是Android应用程序开发中不可或缺的一部分。通过这些组件,开发者可以轻松地创建丰富的用户界面,并实现各种复杂的交互功能。 #### 关键...
在这个名为“Android项目之——漂亮的平台书架”的项目中,我们将会探讨如何在Android平台上构建一个美观且功能齐全的电子书架应用。这个项目的核心目标是为用户提供一个友好的界面,让他们可以方便地浏览、搜索和...
此外,在Android系统源码中也可以看到多种设计模式的应用,如单例模式在ContextImpl类中的使用,以及观察者模式在BroadcastReceiver中的体现等。 通过学习和实践这些设计模式,不仅可以提高代码质量,还能显著提升...
【设计模式——APP项目设计】是针对实习招聘领域的一款移动应用,旨在解决大学生实习过程中遇到的问题,如专业不符、管理松散和找不到实习单位等。该应用与实习网网站互通,利用海量简历库资源,迅速将实习岗位推送...
在Android平台上,构建一个美观的书架应用是一个常见的需求,特别是在教育、阅读或者图书分享类的应用中。这个项目“Android项目之——漂亮的平台书架”旨在教你如何利用Android开发技术来实现这样一个功能丰富的...
【Android源码——笑话故事android应用源码】 这个压缩包包含了一个基于Android平台的笑话故事应用的完整源代码。分析这个源码可以帮助我们深入理解Android应用程序的开发过程,特别是涉及到UI设计、网络请求、数据...
1. **ViewHolder**:适配器通常使用ViewHolder设计模式来缓存视图,减少findViewById的调用,提高性能。 2. **数据绑定**:通过重写getView()方法,根据数据源中的状态来设置条目的选中效果,如背景色、图标等。 3...
在Android开发中,ListView是展示大量数据常用的组件,然而,如果不进行适当的优化,它可能会成为性能瓶颈,导致应用运行缓慢,用户体验下降。本资源“安卓Andriod源码——listview适配器优化重用.zip”关注的核心...
"微软示例数据库脚本.rar"可能包含了一些与设计模式相关的数据库操作示例,这在数据库驱动的应用程序中尤为重要,因为数据访问和处理通常涉及到事务处理、数据缓存等设计模式,如工厂模式用于创建数据库连接,策略...
这个“Android项目之——漂亮的平台书架(实用1)”的压缩包提供了这样的源码,可以帮助开发者理解如何构建一个具有吸引力的图书管理应用。 首先,我们要了解这个项目的核心技术栈。作为Java源码,它主要基于Java语言...
在Android应用开发中,日历组件是不可或缺的一部分,它能够帮助用户查看、管理以及规划时间。本项目"Android应用源码基于 ——MyDate 好看的日历,效果明显"提供了一个定制化的日历视图,旨在提高用户体验并提供独特...
本篇文章将详细介绍Android UI中的一个常用组件——`Spinner`及其与适配器模式的应用。 #### Spinner 组件简介 `Spinner`是Android系统提供的一个下拉列表组件,它主要用于展示一系列选项供用户选择,非常适合于...
这个“Android源码——蓝牙聊天的应用源码.7z”压缩包提供了一款蓝牙聊天应用的完整源代码,可以帮助开发者深入理解如何实现此类应用程序。以下是基于该源码的关键知识点的详细解释: 1. **蓝牙API的使用**: - ...
9. **权限管理**:Android 6.0及更高版本引入了运行时权限,开发者需要在应用中动态请求权限。 10. **测试**:单元测试、集成测试和UI自动化测试是确保代码质量的关键。JUnit、Espresso和Mockito是常用的测试框架。...
总之,这个项目涉及到了Android应用开发中的基本组件使用、适配器模式、图片加载策略以及动画效果的实现,对于初学者来说,是学习Android UI设计和交互实现的好例子。通过对源码的分析和实践,开发者可以更深入理解...
这篇文档将深入解析《安卓Android源码——Andriod日程管理软件源码》的相关知识点,帮助你理解和学习如何在Android平台上开发一个日程管理应用。 首先,Android是Google开发的开源操作系统,主要应用于移动设备,如...
通过研究这个源码,开发者可以学习到如何在Android平台上创建一个高性能、用户友好的图片浏览应用,同时也可了解最佳实践和设计模式在实际项目中的应用。对于初学者来说,这是一个很好的学习资源,能够提升他们在...
Action Bar是Android的一种设计模式,通常位于屏幕顶部,显示应用的标识、标题和可操作的选项,它是Android 3.0(API级别11)引入的。ActionBarSherlock库使得开发者能够在Android 2.1及以上版本的设备上实现Action ...