MVC模式的简要介绍

MVC是三个单词的缩写,分别为: 模型(Model),视图(View)和控制Controller)。 MVC模式的目的就是实现Web系统的职能分工。 Model层实现系统中的业务逻辑。 View层用于与用户的交互。 Controller层是Model与View之间沟通的桥梁,它可以分派用户的请求并选择恰当的视图以用于显示,同时它也可以解释用户的输入并将它们映射为模型层可执行的操作。

Android中的Launcher

通过查看Android中的Launcher的源码,大家会发现其中会有LauncherModel.java,Workspace.java,Launcher.java。

其中LauncherModel为辅助文件封装了许多对数据库的操作(对应MVC中的Model);Workspace为一个抽象的桌面,将应用显示在用户面前,与用户进行交互(对应MVC中的View);Launcher是主要的Activity,里面有很多对用户的操作进行处理,并且将结果反馈在Workspace中(对应MVC中的Controller)。

Android中的其它View

在Android中有常见的ListView,GridView,Gallery等等一些控件能够很好的体现MVC模式,下面将一GridView显示设备上的所有应用为例子讲解MVC模式的应用。先上图。

在main.xml的布局文件中定义GridView:

[html] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="vertical"
  4. android:layout_width="fill_parent"
  5. android:layout_height="fill_parent"
  6. >
  7. <GridView android:id="@+id/myGrid"
  8. android:layout_width="fill_parent"
  9. android:layout_height="fill_parent"
  10. android:padding="10dip"
  11. android:verticalSpacing="10dip"
  12. android:horizontalSpacing="10dip"
  13. android:numColumns="5"
  14. android:stretchMode="columnWidth"
  15. android:gravity="center"
  16. />
  17. </LinearLayout>

顾名思义,GridView就是MVC中的View负责显示。

获取设备上安装的应用信息所有对应的方法,这就是对应的Model。

[java] view plaincopy
  1. public void bindAllApps(){
  2. //这里是关键哦,我们平时写的应用总有一个activity申明成这两个属性
  3. //也就是应用的入口
  4. Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
  5. mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
  6. //符合上面条件的全部查出来,并且排序
  7. mAllApps = mPackageManager.queryIntentActivities(mainIntent, 0);
  8. Collections.sort(mAllApps, new ResolveInfo.DisplayNameComparator(mPackageManager));
  9. }

方法中 mAllApps对应的类型为 List<ResolveInfo>  。

在该例子中最要的就是Adapter,是Model和View中的桥梁,就是 Controller。

[java] view plaincopy
  1. private class GridItemAdapter extends BaseAdapter{
  2. private Context context;
  3. private List<ResolveInfo> resInfo;
  4. //构造函数
  5. public GridItemAdapter(Context c,List<ResolveInfo> res){
  6. context = c;
  7. resInfo = res;
  8. }
  9. @Override
  10. public int getCount() {
  11. // TODO Auto-generated method stub
  12. return resInfo.size();
  13. }
  14. @Override
  15. public Object getItem(int position) {
  16. // TODO Auto-generated method stub
  17. return null;
  18. }
  19. @Override
  20. public long getItemId(int position) {
  21. // TODO Auto-generated method stub
  22. return 0;
  23. }
  24. @Override
  25. public View getView(int position, View convertView, ViewGroup parent) {
  26. convertView = LayoutInflater.from(context)
  27. .inflate(R.layout.application_layout, null);
  28. ImageView app_icon = (ImageView)convertView.findViewById(R.id.app_icon);
  29. TextView app_tilte = (TextView)convertView.findViewById(R.id.app_title);
  30. ResolveInfo res = resInfo.get(position);
  31. app_icon.setImageDrawable(res.loadIcon(mPackageManager));
  32. app_tilte.setText(res.loadLabel(mPackageManager).toString());
  33. return convertView;
  34. }
  35. }

Android中常见的MVC模式相关推荐

  1. Android中常见的MVC/MVP/MVVM模式

    Android中常见的MVC/MVP/MVVM模式 经典MVC 在1979年,经典MVC模式被提出. 在当时,人们一直试图将纯粹描述思维中的对象与跟计算机环境打交道的代码隔离开来,而Trygve Re ...

  2. android中常见的回调模式

    最近做ListView网络图片的异步加载,以及下载网路MP3动态进度显示.看过一些源码都涉及这样的回调,这样节省了很多不必要的重复操作,非常简便.写了一个Demo,够简单的吧. Demo1.java ...

  3. Android中常见布局

    android中常见布局 [1]线性布局 水平 垂直. <?xml version="1.0" encoding="utf-8"?> <Lin ...

  4. Android中常见的内存泄露

    内存泄漏是指无用对象(不再使用的对象)持续占有内存或无用对象的内存得不到及时释放,从而造成内存空间的浪费称为内存泄漏.内存泄露有时不严重且不易察觉,这样开发者就不知道存在内存泄露,但有时也会很严重,会 ...

  5. Go语言中常见的并发模式

    Go语言最吸引人的地方是它内建的并发支持.Go语言并发体系的理论是C.A.R Hoare在1978年提出的通信顺序进程(Communicating Sequential Process,CSP).CS ...

  6. Android中的设计模式-桥梁模式

    "假舆马者,非利足也,而致千里:假舟楫者,非能水也,而绝江河.君子生非异也,善假于物也."--荀子<劝学>. 美国好莱坞电影有<蜘蛛侠>.<蝙蝠侠&g ...

  7. Android开发——Android中常见的4种线程池(保证你能看懂并理解)

    0.前言 转载请注明出处:http://blog.csdn.net/seu_calvin/article/details/52415337 使用线程池可以给我们带来很多好处,首先通过线程池中线程的重用 ...

  8. 【EventBus】发布-订阅模式 ( Android 中使用 发布-订阅模式 进行通信 )

    文章目录 一.拷贝 发布-订阅模式 相关类 二.完整代码示例 一.拷贝 发布-订阅模式 相关类 将上一篇博客 [EventBus]发布-订阅模式 ( 使用代码实现发布-订阅模式 ) 写的 发布-订阅模 ...

  9. Android中四种启动模式,最容易理解的小白教程

    说起Android中的启动模式,其实是个很基础的内容,谁都知道是4中启动模式,没错分别是以下四种: 1,standard 2,singleTop 3,singleTask 4,singleInstan ...

最新文章

  1. CVPR 2021论文分享会日程公布!
  2. 导师:顶会论文3天都复现不出来?你退学吧!
  3. 【直观理解】为什么梯度的负方向是局部下降最快的方向?
  4. VS2010创建ATL工程及使用C++测试COM组件
  5. LeetCode 406 根据身高重建队列
  6. yield表达式形式的应用
  7. MongoDB 日志文件过大的解决方法
  8. java显示毫秒改成分钟_【转】java获取当前年、月、日 、小时 、分钟、 秒、 毫秒...
  9. Zookeeper-Zookeeper可以干什么
  10. Ajax.net中的Web服务
  11. (一)PyQt5系列教程:使用PyQt5创建一个简单的demo
  12. 深信服 云桌面 linux,深信服桌面云-深信服桌面云下载 v3.0官方版--pc6下载站
  13. ​手机APP应用软件开发
  14. SMCJ系列TVS瞬态抑制二极管型号参数表
  15. [phyton]文件的简单读写练习
  16. zynq中的BootROM
  17. python利用selenium爬取京东数据
  18. Spring整合Quartz集群部署
  19. Web应用程序和Web网站
  20. 石化煤矿化工行业安全生产风险预警系统软件

热门文章

  1. 002_XMLHttpRequest对象
  2. l298n电机哪一端为正_L298N控制直流电机正反转_张天鹏
  3. 360怎么看电脑配置_Win10系统自带杀毒和垃圾清理好么?需不需要安装360卫士
  4. java查看sql视图_SQL Server查看视图定义总结
  5. eclipse mysql Xml配置_mysql8.0在eclipse中通过xml文件配置数据库连接池
  6. Zabbix实战之客户端自动注册
  7. oracle 视图使用rownum,Oracle数据对象--视图
  8. php 算年龄,PHP计算年龄、
  9. java list 速度_Java中的List你真的会用吗?不会用的话请收藏我的这篇文章
  10. layui遍历json数组_shell脚本:json格式化与字段抓取(下)