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
plain
copy

  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
plain
copy

  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
plain
copy

  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中的创建型模式总结

    共5种,单例模式.工厂方法模式.抽象工厂模式.建造者模式.原型模式 单例模式 定义:确保某一个类的实例只有一个,而且向其他类提供这个实例. 单例模式的使用场景:某个类的创建需要消耗大量资源,new一个 ...

  2. [转] Android中的设计模式-备忘录模式

    转自Android中的设计模式-备忘录模式 定义 备忘录设计模式的定义就是把对象的状态记录和管理委托给外界处理,用以维持自己的封闭性. 比较官方的定义 备忘录模式(Memento Pattern)又叫 ...

  3. Android中常见的内存泄漏

    为什么会产生内存泄漏? 当一个对象已经不需要再使用了,本该被回收时,而有另外一个正在使用的对象持有它的引用从而导致它不能被回收,这导致本该被回收的对象不能被回收而停留在堆内存中,这就产生了内存泄漏. ...

  4. Android中Adapter和Bridge模式理解和应用

    一 Adapter模式 意图: 将一个类的接口转换成客户希望的另外一个接口. Adapter模式使得原本由于接口不兼容而不能在一起工作的那些类可以在一起工作. 适用性: 使用一个已存在的类,而它的接口 ...

  5. Android GUI架构之MVC模式

    1. Android UI框架 和其他Java UI框架一样,Android UI框架也是单线程和事件驱动的,采用MVC模式进行组织. 2. MVC模式 M:Model,是应用的核心,也就是应用真正想 ...

  6. Android 中常见控件的介绍和使用

    1 TextView文本框 1.1 TextView类的结构 TextView 是用于显示字符串的组件,对于用户来说就是屏幕中一块用于显示文本的区域.TextView类的层次关系如下: java.la ...

  7. Android中Activity的启动模式

    简介 Android中的活动启动方式分为4种:standard, singleTop, singleTask, singleInstance.可以在AndroidManifest.xml中通过给< ...

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

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

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

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

随机推荐

  1. 信息传递--NOIP2015 day1 T2--暴力

    这道题我用了判联通量加暴力,但联通量判炸了....然后从code[VS]上看到个不错的代码,就拿来了^_^... 基本思路是去掉环外的点,然后走每一个联通块. #include <iostrea ...

  2. 分布式文件系统 - FastDFS

    分布式文件系统 - FastDFS 别问我在哪里 也许我早已不是我自己,别问我在哪里,我一直在这里. 突然不知道说些什么了... 初识 FastDFS 记得那是我刚毕业后进入的第一家公司,一个技术小白 ...

  3. CROSSTOOL-NG建立交叉编译工具链

    CROSSTOOL-NG建立交叉编译工具链 因为考试和学习的原因我已经一段时间没有玩我的JZ2440,现在终于考完试了,我再次找出了我的JZ2440.我之前学习的时候使用的是韦东山老师提供的开发工具, ...

  4. 2815: [ZJOI2012]灾难 - BZOJ

    题目描述 Description 阿米巴是小强的好朋友.    阿米巴和小强在草原上捉蚂蚱.小强突然想,如果蚂蚱被他们捉灭绝了,那么吃蚂蚱的小鸟就会饿死,而捕食小鸟的猛禽也会跟着灭绝,从而引发一系列的 ...

  5. vi 常用技巧

    vi/vim : Visual Interface/VI iMproved VI命令可以说是Unix/Linux世界里最常用的编辑文件的命令了,但是因为它的命令集众多,很多人都不习惯使用它,其实您只需 ...

  6. linux下MySQL 5.6源码安装

    linux下MySQL 5.6源码安装 1.下载:当前mysql版本到了5.6.20 http://dev.mysql.com/downloads/mysql 选择Source Code 2.必要软件 ...

  7. (ASP.NET)C#连接Oracle数据库示例(中文乱码问题解决)

    接手了一个遗留的ASP.NET系统,数据库用的是Oracle,以前没搞过.NET和Oracle数据库,数据库搞了半天才解决乱码问题,在此做个笔记备忘. 1.下载安装ODAC 1)请去Oracle官网下 ...

  8. Ubuntu的LTS版本

    Ubuntu的LTS版本什么意思 LTS是长期支持(Long Term Support)的缩写. 我们每六个月制作一个新的Ubuntu桌面和服务器的版本,这意味着你总能拥有开源世界提供的最新最好的应用 ...

  9. [设计模式] 4 原型模式 prototype

    设计模式:可复用面向对象软件的基础>(DP)本文介绍原型模式和模板方法模式的实现.首先介绍原型模式,然后引出模板方法模式. DP书上的定义为:用原型实例指定创建对象的种类,并且通过拷贝这些原型创 ...

  10. 数据库批量插入数据的shell脚本

    测试用,先来一个简单的,这个是国产神通数据库的,用isql命令: !/bin/bash == "-h" ] then echo "USAGE: $0 table_name ...