Adapter介绍

Android是完全遵循MVC模式设计的框架,Activity是Controller,layout是View
因为layout五花八门,很多数据都不能直接绑定上去,所以Android引入了Adapter这个机制作为复杂数据的展示的转换载体,所以各种Adapter只不过是转换的方式和能力不一样而已。
几种常用的Adapter:



其中BaseAdapter的直接子类:
ArrayAdapter, CursorAdapter, SimpleAdapter

BaseAdapter的间接子类:
ResourceCursorAdapter, SimpleCursorAdapter

Adapter是将数据绑定到UI界面上的桥接类。Adapter负责创建显示每个项目的子View和提供对下层数据的访问。
在多数情况下,你不需要创建自己的Adapter。Android提供了一系列Adapter来将数据绑定到UI Widget上。

因为Android负责提供数据和选择用于显示每个项目的View,所以Adapter能快速地修改要绑定的控件的外观和功能。

下面的列表显示了两个最有用和最通用的本地Adapter:

❑ ArrayAdapter
ArrayAdapter是一个绑定View到一组对象的通用类。默认情况下,ArrayAdapter绑定每个对象的toString值到在layout中预先定义的TextView控件上。可变通的,构造函数允许你使用更加复杂的layout或者通过重写getView方法来扩展类从而使用TextView的替代物(如ImageView或嵌套的layout)。

❑ SimpleCursorAdapter
SimpleCursorAdapter绑定View到Content Provider查询返回的游标上。指定一个XML layout定义,然后将数据集中的每一列的值绑定到layout中的一个View上。

使用Adapter进行数据绑定:

将Adapter应用到继承自AdapterView类上,你需要调用View的setAdapter方法,传入一个Adapter实例,如下面的片段所示:

ArrayList myStringArray = new ArrayList();ArrayAdapter myAdapterInstance;int layoutID = android.R.layout.simple_list_item_1;myAdapterInstance = new ArrayAdapter(this, layoutID, myStringArray);myListView.setAdapter(myAdapterInstance);


 

这个片段显示了最简单的情况,将数组中的字符串绑定到ListView中用于显示每个项目的简单TextView控件上。

Adapter中的体系结构:

在android开发中列表的使用是十分常见的。google对列表的封装使列表既有显示传统文本列表的能力,也有加入了诸如选择项、复选项等处理事件的能力。

在android的api中,LIST和adapter都被放在了android.widget包内。包内的具体结构我这里先不展示了,主要侧重列表和adapter。adapter的作用就是将要在列表内显示的数据和列表本身结合起来。列表本身只完成显示的作用,其实他就是继承自VIEWGROUP类。但是他又有一个独特的函数就是setAdapter()就是完成了view和adapter的结合。adapter如同其本身含义,其实就是一个适配器,他可以对要显示的数据进行统一的封装,主要是将数据变成view提供给list。

我们先来看看adapter的体系:

public interface Adapter----0层(表示继承体系中的层次)

public interface ExpandableListAdapter---(无所谓层次因为没有其他接口继承实现它)

这是adapter的始祖,其他个性化的adapter均实现它并加入自己的接口。

public interface ListAdapter----1层

public interface SpinnerAdapter----1层

public interface WrapperListAdapter----2层(实现ListAdapter)

以上接口层面上的体系已经完了。可以看出来作为widget view的桥梁adapter其实只分为2种:ListAdapter和SpinnerAdapter以及ExpandableListAdapter。也就是说所有widget也就是基于list和spinne与ExpandableList三种view形式的。

由于在实际使用时,我们需要将数据加入到Adapter,而以接口形式呈现的adapter无法保存数据,于是Adapter就转型为类的模式。

public abstract class BaseAdapter----2层(实现了ListAdapter和SpinnerAdapter)

以抽象类的形式出现构造了类型态下的顶层抽象,包容了List和Spinner

public class ArrayAdapter----3层

public class SimpleAdapter---3层

public class CursorAdapter----3层(CursorAdapter其后还有子类这里先不探讨)

基本体系有了之后,让我们看看顶层Adapter里有哪些方法(只列举常用的):

abstract Object getItem(int position)

abstract int getCount()

abstract long getItemId(int position)

abstract int getItemViewType(int position)

abstract View getView(int position,View convertVeiw,ViewGroup parent)

以上是比较重要的方法,ArrayAdapter他们也是重新实现以上方法的。在实际的开发过程中,往往我们要自己做属于自己的Adapter,以上方法都是需要重新实现的。

 

 


 

 

 

 

更多相关文章

  1. Android教程之MediaStore
  2. android TextView属性
  3. android中的sqlite数据库加密
  4. 关于基本控件TextView属性大全详解
  5. SwipeRefreshLayout 配合fragment 下拉刷新的使用,超级简单
  6. Android系统多媒体框架添加对.wma格式的支持
  7. Android(安卓)studio登录界面之记住密码
  8. Android之玩转MPAndroidChart让(折线图、柱形图、饼状图、散列图
  9. mybatisplus的坑 insert标签insert into select无参数问题的解决

随机推荐

  1. 如何将smarty安装到MVC架构中(代码示例)
  2. PHP的一些安全设置(优化)
  3. PHP中字符串处理的一些常用函数
  4. PHP7.4新特性汇总
  5. 关于PHP目录操作总结
  6. mysql正则匹配模糊查询某个字段
  7. TP6验证码验证失败的原因以及解决办法
  8. PHP对一组数进行重新排列(冒泡算法)
  9. 怎么循环查看php-fpm的内存占用情况
  10. 精选PHP中常用的20个类库