1.什么是MVC
MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑----摘自百度百科。
M:model:指的是用来封装信息的对象。
V:view:用来显示model中封装的信息的组件。
C:controller:用来控制model中的信息怎么输出到view中的。
在android中最典型的MVC就是listview的显示
M:model指你要显示的数据,如封装数据的cursor,array等等
V:view:就是listView用来显示封装好的数据
C:controller:就是adaptor,用来控制数据如何向listview中显示,如arrayadaptor,cursoradaptor等等
MVC可以使程序耦合性降低,视图层和业务层分离,这样就允许更改视图层代码而不用重新编译模型和控制器代码,同样,一个应用的业务流程或者业务规则的改变只需要改动MVC的模型层即可.同时可以让代码复用性提高,由于已经将数据和业务规则从表示层分开,所以可以最大化的重用代码了。
2.MVC与Android SDK
MVC的基本原理就是通过Controller连接View和Model。也就是说,当View中显示的数据发生变化时,就会通知Controller,而不是直接通知Model,这时Controller接到View的通知后,会在Model中采取相应的动作来修改数据,使用MVC模式可以将数据和显示部分分离,这样修改一方时不会影响另一方,更有利于程序的维护。
在Android SDK中使用MVC的组件非常多,例如,列表控件ListView,GridView,Spinner等都采用MVC模式与数据交互,在Android中MVC中的V就是组件,M就代表着各种数据源,C代表Adapter类,包括BaseAdapter,SimpleAdapter,SimpleCursorAdapter,ArrayAdapter,CursorAdapter等。他们分别对应不同的数据源,这些Adapter都需要使用getView方法返回当前列表项显示的View对象,当Model发生改变的时候调用BaseAdapter.notifyDataSetChanged方法通知组件数据发生变化,这时Adapter会调用getView方法重新显示内容。总之无论是数据还是组件发生变化,都要通过Adapter这个桥梁来达到同步的目的。
3.Adapter的简单使用
1.ArrayAdapter
String data[] =new String[]{"A","B","C","D","E","F"};
listView = (ListView) findViewById(R.id.listView);
ArrayAdapter<String> adapter =new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, data);
listView.setAdapter(adapter);
代码很简单,效果也很简单,事实上ArrayAdapter有多种构造方法,稍稍改变一下第二个参数就可以得到带单选,多选,勾选等效果的ListView。
如:android.R.layout.simple_list_item_checked:
还有android.R.layout.simple_list_item_multiple_choice多选框 ,android.R.layout.simple_list_item_single_choice单选框 等。当然这些都需要使用listView.setChoiceMode();来设置单选多选,若不设置单选多选将不会生效。
注意:其中第二个参数可以自定义一个layout,但是这个layout必须要有TextView控件。
2.SimpleAdapter
List<Map<String,Object>> data =http://www.mamicode.com/new ArrayList