您的位置:首页 > 移动开发 > Android开发

MVC简介与在Android的ListView中的应用

2017-05-27 10:54 387 查看
MVC全名为Model View Controller,即模型+视图+控制器。

Model层:实现系统的业务逻辑;

View层:负责与用户交互,即在界面上展示数据对象给用户;

Control层:Model与View之间沟通的桥梁,它可以分派用户的请求并选择恰当的视图以用于显示,同时它也可以解释用户的输入并将它们映射为模型层可执行的操作。

最典型的MVC就是Web应用中的jsp+servlet+javabean模式。JavaBean为模型,JSP实现视图层,Serlvet实现控制器。

MVC的优点有:耦合性低、重用性高、部署快、可维护性高等;

MVC的缺点有:调试困难、不适合小型与中等规模的应用程序、视图与控制器间的连接过于紧密等。

框架和设计模式存在一些区别如下:

框架通常是代码重用,而设计模式是设计重用,架构则介于两者之间,部分代码重用,部分设计重用,有时分析也可重用。设计模式是对在某种环境中反复出现的问题以及解决该问题的方案的描述,它比框架更加抽象;框架可以用代码表示,也能直接执行或复用,而模式只有实例才能用代码表示;设计模式是比框架更小的元素,一个框架中往往含有一个或多个设计模式,框架总是针对某一特定应用领域,但同一模式却可适用于各种应用。

框架模式通常有MVC、MTV、MVP、CBD、ORM等;

框架通常有C++语言的QT、MFC、gtk,Java语言的SSH 、SSI,php语言的 smarty(MVC模式),python语言的django(MTV模式)等;

设计模式有23种,即单例模式、工厂模式、适配器模式、观察者模式等。

在Android中使用MVC最典型的例子就是ListView,功能更加强大的RecyclerView。

` 使用ListView,用户能够通过手指的上下滑动将屏幕外的数据滚动到屏幕内。

View指的是组件,此处为listView用来显示封装好的数据,即每一条Item的显示形式; 

Model为各种数据源,此处为在ListView中是指添加到View中的数据;

Control代表Adapter类,Android定义了很多适配器的实现类,其中比较容易使用的有 ArrayAdapter,可以通过泛型指定数据类型,另外用户也可以自定义Adapter。Adapter需要使用getView方法返回当前列表项显示的View对象,当Model发生改变的时候,需通知组件数据发生变化,然后调用getView方法重新显示内容,Adapte起着桥梁的作用。

<
8c42
br />

补充内容:通过使用ViewHolder可以提高ListView的运行效率。



当ListView有大量的数据需要加载的时候,会占据大量内存,影响系统性能,此时就需要按需填充并重新使用view来减少对象的创建。使用内部类ViewHolder对控件的实例进行缓存。

重写getView方法加载的方式通常有三种,第一种就是每一次都重新定义一个View载入布局,再加载数据。第二种当convertView不为空的时候直接重新使用convertView从而减少了很多不必要的View的创建,然后加载数据,实例代码如下:

if (convertView == null) {
iconvertView = LayoutInflater.from(getContext()).inflate(
R.layout.item, parent, false);

}

第三种定义一个ViewHolder内部类,定义如下:

class ViewHolder {
TextView tv;
ImageView iv;

}

方法getView()中的主要代码如下:

ViewHolder viewHolder;

if (convertView == null) {
convertView = LayoutInflater.from(getContext()).inflate(
R.layout.item,parent, false);
viewHolder = new ViewHolder();
viewHolder.tv = (TextView) convertView.findViewById(R.id.text);
viewHolder.iv = (ImageView) convertView.findViewById(R.id.icon);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: