Android中常见的MVC模式

摘要:
MVC模式的目的是实现Web系统的功能划分。Android中的Launcher通过检查Android中Launcher的源代码,你会发现会有LauncherModel。java,工作区。java,Launcher javaAndroid中的其他视图Android中有常见的ListView、GridView、Gallery和其他控件,这些控件可以很好地反映MVC模式。接下来,GridView显示设备上的所有应用程序将作为示例来解释MVC模式的应用。在本例中,最重要的是适配器,它是模型和视图之间的桥梁,也是控制器。

MVC模式的简要介绍

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

Android中常见的MVC模式第1张

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模式的应用。先上图。

Android中常见的MVC模式第2张

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

免责声明:文章转载自《Android中常见的MVC模式》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇MySQL发展和技术选型——《MySQL DBA 工作笔记》delphi 去掉TreeView水平滚动条下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Android Launcher 简易Launcher开发

第一步,把我们的应用程序作为home(即实现按下home键,启动自己的launcher.) 要把我们的应用程序作为home,只需要在AndroidManifest.xml中添加:<category android:name="android.intent.category.HOME" /><category android:name="...

移动App设计之分层架构+MVC

场景分析:我们知道,一个移动设备的应用大多与网络有关,也就是说,我在移动设备上看到的数据,一般都是从Server上”拉“过来,显示在我们的移动设备(ios androiud、wpohone等)上。那我们就这个”拉“的过程分析,拉什么样的数据?去哪里拉?拉过来的数据怎么处理?用编程(开发)的思维看,就是定义什么实体(业务实体)、发送请求、解析数据。当然这也只...

android Launcher——启动过程详解

一LauncherApplication->onCreate        --1.//设置最小堆内存4M        --2.//建立应用图标缓存器        --3.//建立LauncherModel        --4.//注册Intent.ACTION_PACKAGE_ADDED,Intent.ACTION_PACKAGE_REMOV...

【.NET-MVC】ASP.NET MVC学习笔记-概述

第 1 篇:理解控制器和视图 MVC概述 MVC理论就是模型、视图、控制器。   (其实也是种思想,为了让前端、程序、数据分开,也是想解耦) MVC请求流程是:访问控制器,控制器来创建模型,模型去数据库获取数据,模型再返回给视图。 VS 2013 创建MVC4 Web应用程序,自动生成MVC框架对应的文件夹,分别是Model、View、Controlle...

Asp.Net的两种开发方式

来源:http://www.zhidao91.com/asp-net/ 在经过对.Net平台深入的学习以后,我发现很多语言开发动态网站时,它的后台逻辑都差不多是相同的,今天在这里我给大家来聊聊在.Net平台下网站的开发! 目前,ASP.NET中两种主流的开发方式是:ASP.NET Webform和ASP.NET MVC。从下图可以看到ASP.NET We...

局域网永恒之蓝病毒发包的解决方案之二

1. 使用shadowbroker 的 eternalblue还有 doublepulsar 实现注入到目标机器的进程, 然后使用kali下的msf 获取到有病毒机器的shell 然后修改密码 查看问题等. 根据网上的教程来进行处理 以及复现等 教程地址: http://blog.csdn.net/claygrit/article/details/7728...