Android Adapter详解

适配器对象作为一个AdapterView和底层数据的视图之间的桥梁。该适配器提供访问的数据项。该适配器还负责使数据集的查看每个项目。

他的子类有:

ArrayAdapter<T>:数组适配器

BaseAdapter:基本适配器

CursorAdapter:光标适配器

HeaderViewAdapter:顶部视图适配器

ListAdapter:列表适配器

ResourceCursorAdapter:资源光标适配器

SimpleAdapter:简单适配器

SimpleCursorAdapter:简单光标适配器

SpinnerAdapter:微调适配器

WrapperListAdapter:包装列表适配器


dapterAndroid中占据一个重要的角色,它是数据和UIView)之间一个重要的纽带。在常见的View(ListView,GridView)等地方都需要用到Adapter。如图1直观的表达了DataAdapterView三者的关系。


1 Adapter、数据、UI三者关系(PS:此图来自Google I/O



2AndroidAdapter类型层级图

Adapter本身只是一个接口,它派生了ListAdapter和SpinnerAdapter两个子接口,其中

ListAdapter为AbsListView提供列表项,而SpinnerAdapter为AbsSpinner提供列表项。

Adapter接口及其实现类的继承关系类图如图。


在继承关系图可以看出,几乎所有Adapter都继承了BaseAdapter,而BaseAdapter同时实现了ListAdapter、SpinnerAdapter两个接口,

因此BaseAdapter及其子类可以同时为AbsListView、AbsSpinner提供列表项。

ArrayAdapter:简单、易用的Adapter,通常用于将数据或List集合的多个值包装成多个列表项。

SimpleAdapter:并不简单、功能强大的Adapter,可用于将List集合的多个对象包装成多个列表项。

SimpleCursorAdapter:与SimpleAdapter基本相似,只是用于包装Cursor提供的数量数据。

BaseApadter:通常用于被扩展。扩展BaseAdapter可以对各列表项进行最大限度的定制。


实例:使用ArrayAdapter创建ListView

//调用列表控件

ListView list = (ListView) findViewById(R.id.list);

//定义一个数组

String[] arr = {"天安门","长城","天坛"};

//将数组包装为ArrayAdapter

ArrayAdapter<Stering> adapter = new ArrayAdapter(this,R.layout.checked_item,arr);

//为ListView设置Adapter

list.setAdapter(adapter);


上面的程序中两行粗体字代码创建两个ArrayAdapter,创建ArrayAdapter时必须指定如下三个参数。

1,Context:这个参数无须多说,它代表了访问整个Android应用的接口。几乎创建所有组件都需要传

Context对象。

2,textViewResourceld:一个资源ID,该资源ID代表一个TextView,该TextView组件将作为ArrayAdapter

的列表项组件。

3,数据或List:该数组或List将负责为多个列表项提供数据。


实例:使用SimpleAdapter创建ListView

//创建一个List集合,List集合的元素的Map

List<Map<String,Object>> listItems = new ArrayList<Map<String,Object>>();

//创建一个SimpleAdapter

SimpleAdapter simpleAdapter = new SimpleAdapter(this,listItem,R.layout.simple_item,

new String[] {"personName","header","desc"},

new int[] {R.id.name,R.id.header,R.id.desc});


1,第2个参数:该参数应该是一个List<? extends Map<String,?>?>类型的集合对象,

该集合中每个Map<String,?>对象生成一个列表项。

2,第3个参数:该参数指定一个界面布局的ID。例如此处指定了R.layout.simple_item,

这意味着使用/res/layout/simple_item.xml文件作为列表项组件。

3,第4个参数:该参数应该是一个String[]类型的参数,该参数决定提取Map<String,?>

对象中哪些些key对应的value来生成列表项。

4,第5个参数:该参数应该是一个int[]类型的参数,该参数决定填充哪些组件。


实例:扩展BaseAdapter实现不存储列表项的ListView

ListView myView = (ListView) findViewById(R.id.myList);

BaseAdapter adapter = new BaeAdapter(){

public int getCount(){

` //指定一共包含40个选项

return 40;

}

public Object getItem(int position){

return null;

}

//重写该方法,该项方法的返回值将作为列表项的ID

public long getItemId(int position){

return position;

}

//重写该方法,该方法的返回的View将作为列表框

public View getView(int position,View convertView,ViewGroup parent){

//创建一个LinearLayout,并向其中添加两个组件

LinearLayout line = new LinearLayout(BaseAdapterTest.this);

line.setOrientation(0);

ImageView image = new ImageView(BaseAdapterTest.this);

image.setImageResource(R.drawable.ic_launcher);

TestView text = new TestView(BaseAdapterTest.this);

   text.setTextSize(20);

line.addView(image);

line.addView(text);

return line;

}

}

myList.setAdapter(adapter);


getCount():该方法的返回值控制该Adapter将会包含多少个列表项。

getItem(int position):该方法的返回值决定第position处的列表项的内容。

getItemId(int position):该方法的返回值决定第position处的列表项的ID。

getView(int position,View convertView,ViewGroup parent):该方法的返回值决定第position处的列表项组件。


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值