Android Adapter的体系

移动开发 Android
在Android开发中列表的使用是十分常见的。Google对列表的封装使列表既有显示传统文本列表的能力,也有加入了诸如选择项、复选项等处理事件的能力。这里写一些我对这个问题的理解。

AndroidAPI中,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)

以上接口层面上的体系已经完了。可以看出来作为widgetview的桥梁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里有哪些方法(只列举常用的):

  1. abstract Object getItem(int position)  
  2. abstract int getCount()  
  3. abstract long getItemId(int position)  
  4. abstract int getItemViewType(int position)  
  5. abstract View getView(int position,View convertVeiw,ViewGroup parent) 

以上是比较重要的方法,ArrayAdapter他们也是重新实现以上方法的。在实际的开发过程中,往往我们要自己做属于自己的Adapter,以上方法都是需要重新实现的。这个在android提供的APIdemo例子中可以看到。  

【编辑推荐】

Android Adapter的体系

Android智能手机操作系统

Android开发实例详解之IMF

官方文档:Android应用程序运行的性能设计

责任编辑:zhaolei 来源: 网络转载
相关推荐

2014-12-17 09:57:01

AndroidAdapteViewHolder

2014-07-15 17:17:31

AdapterAndroid

2014-07-23 09:33:52

2009-04-29 09:06:18

C#设计模式Adapter

2013-12-26 17:08:36

Android开发Android应用自定义Adapter显

2011-06-03 16:31:57

iphone Android WebOS

2010-02-24 09:18:49

WCF Adapter

2017-02-06 21:08:34

Android虚拟机体系结构

2012-08-02 10:46:34

JavaAdapter模式

2012-08-20 10:48:09

2016-12-29 10:32:06

2012-02-23 09:51:58

虚拟化SRM桌面虚拟化

2021-01-06 10:09:38

MySQL

2010-07-22 12:07:02

AIX TELNET

2009-06-26 15:58:28

EJB

2010-04-20 10:34:33

2010-04-26 10:01:45

Oracle认证

2009-08-07 10:20:38

WebSphere A

2018-12-05 10:10:40

HBase服务器架构

2010-07-17 00:57:52

Telnet身份验证
点赞
收藏

51CTO技术栈公众号