adapter用法总结.docx
- 文档编号:4829850
- 上传时间:2023-05-07
- 格式:DOCX
- 页数:22
- 大小:195.67KB
adapter用法总结.docx
《adapter用法总结.docx》由会员分享,可在线阅读,更多相关《adapter用法总结.docx(22页珍藏版)》请在冰点文库上搜索。
adapter用法总结
AndroidAdapter
Adapter是用来帮助填充数据的中间桥梁,比如通过它将数据填充到ListView,GridView,Gallery.而android 提供了几种Adapter:
ArrayAdapter,BaseAdapter,CursorAdapter,HeaderViewListAdapter,ListAdapter,ResourceCursorAdapter,SimpleAdapter,SimpleCursorAdapter,SpinnerAdapter,WrapperListAdapter.
根据数据来源形式的不同可以选择不同的Adapter,比如数据来源于一个Arraylist 就使用BaseAdapter,SimpleAdapter,而数据来源于通过查询数据库获得Cursor那就使用
Adapter应用总结
首先来看一下Adapter的体系结构:
一个Adapter的对象扮演一个桥梁的角色。
这个桥梁连接着一个AdapterView和它所包含的数据。
Adapter提供了一个通到数据项的途径。
Adapter还负责为在数据集里的每个数据生项生成一个View。
它有一个重要的方法:
publicabstractViewgetView(intposition,ViewconvertView,ViewGroupparent)
。
这个方法被setListAdapter(adapter)间接地调用。
getView 方法的作用是得到一个View,这个view显示数据项里指定位置的数据,你可以或者手动创建一个view或者从一个XMLlayout中inflate。
当这个view被inflated,它的父view(如GridView,ListView等)将要使用默认的layout参数,除非你用inflate(int,android.view.ViewGroup,boolean)方法来指定一个根view并防止附着在根上。
下面分别讲一下它的几个常见的子类:
ListAdapter接口:
继承于Adapter。
ListAdapter是一个ListView和list上的数据之间的桥梁。
数据经常来自于一个Cursor,但这不是必须的。
ListView能显示任何数据,只要它是被一个ListAdapter包装的。
BaseAdapter抽象类:
是一个实现了既能在ListView(实现了ListAdapter接口)和Spinner(实现了Spinner接口)里用的Adapter类的一般基类。
ArrayAdapter类:
一个管理这样的ListView的ListAdapter:
这个ListView被一个数组所支持。
这个数组可装任意对象。
默认状态下,这个类预期能这样:
提供的资源id与一个单独的TextView相关联。
如果你想用一个更复杂的layout,就要用包含了域id的构造函数。
这个域id能够与一个在更大的layout资源里的TextView相关联。
它将被在数组里的每个对象的toString()方法所填满。
你可以添加通常对象的lists或arrays。
重写你对象的toString()方法来决定list里哪一个写有数据的text将被显示。
如果想用一些其它的不同于TextView的view来显示数组(比如ImageViews),或想有一些除了toString()返回值所填在views里的以外的数据,你就要重写getView(int,View,ViewGroup)方法来返回你想要的View类型。
SimpleAdapter类:
一个使静态数据和在XML中定义的Views对应起来的简单adapter。
你可以把list上的数据指定为一个Map范型的ArrayList。
ArrayList里的每一个条目对应于list里的一行。
Maps包含着每一行的数据。
你先要指定一个XML,这个XML定义了用于显示一行的view。
你还要指定一个对应关系,这个对应关系是从Map的keys对应到指定的views。
绑定数据到views发生在两个阶段:
如果一个simpleAdapter.ViewBinder是可用的,那么SetViewValue(android.view.View,Object,String)要被调用。
如果返回true,那么绑定发生了。
如果返回false,那么如下views将被按顺序地尝试:
~实现了Checkable的View(如CheckBox),预期的绑定值是boolen
~TextView,预期的绑定值是String,并且SetViewText方法被调用
~ImageView,预期的绑定值是一个资源的id或String。
并且SetViewImage方法被调用
如果没有合适的绑定被发现,一个IllegalStateException被抛出。
Android之Adapter用法总结
分类:
android2013-03-1110:
23 10957人阅读 评论(8) 收藏 举报
android安卓Adapterlistviewlayout
Android之Adapter用法总结
1.概念
Adapter是连接后端数据和前端显示的适配器接口,是数据和UI(View)之间一个重要的纽带。
在常见的View(List View,Grid View)等地方都需要用到Adapter。
如下图直观的表达了Data、Adapter、View三者的关系:
Android中所有的Adapter一览:
由图可以看到在Android中与Adapter有关的所有接口、类的完整层级图。
在我们使用过程中可以根据自己的需求实现接口或者继承类进行一定的扩展。
比较常用的有 Base Adapter,Impleader,Adapter,Counteradaptation等。
∙BaseAdapter是一个抽象类,继承它需要实现较多的方法,所以也就具有较高的灵活性;
∙ArrayAdapter支持泛型操作,最为简单,只能展示一行字。
∙SimpleAdapter有最好的扩充性,可以自定义出各种效果。
∙SimpleCursorAdapter可以适用于简单的纯文字型ListView,它需要Cursor的字段和UI的id对应起来。
如需要实现更复杂的UI也可以重写其他方法。
可以认为是SimpleAdapter对数据库的简单结合,可以方便地把数据库的内容以列表的形式展示出来。
2.应用案例
1)ArrayAdapter
列表的显示需要三个元素:
a.ListVeiw用来展示列表的View。
b.适配器 用来把数据映射到ListView上的中介。
c.数据 具体的将被映射的字符串,图片,或者基本组件。
案例一
publicclassArrayAdapterActivityextendsListActivity{
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
//列表项的数据
String[]strs={"1","2","3","4","5"};
ArrayAdapter
setListAdapter(adapter);
}
}
案例二
publicclassMyListViewextendsActivity{
privateListViewlistView;
//privateList
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
listView=newListView(this);
listView.setAdapter(newArrayAdapter
setContentView(listView);
}
privateList
List
data.add("测试数据1");
data.add("测试数据2");
data.add("测试数据3");
data.add("测试数据4");
returndata;
}
}
上面代码使用了Adapter(Context context, int resourcefulness, List
同时用adapter()完成适配的最后工作。
效果图如下:
2)SimpleAdapter
simpleAdapter的扩展性最好,可以定义各种各样的布局出来,可以放上ImageView(图片),还可以放上Button(按钮),CheckBox(复选框)等等。
下面的代码都直接继承了ListActivity,ListActivity和普通的Activity没有太大的差别,不同就是对显示ListView做了许多优化,方面显示而已。
案例一
simple.xml
xmlversion="1.0"encoding="utf-8"?
>
android=" android: orientation="vertical" android: layout_width="fill_parent" android: layout_height="fill_parent" > android: id="@+id/img" android: layout_width="wrap_content" android: layout_height="wrap_content" android: layout_margin="5dp" /> android: id="@+id/title" android: layout_width="wrap_content" android: layout_height="wrap_content" android: textColor="#ffffff" android: textSize="20sp" /> publicclassSimpleAdapterActivityextendsListActivity{ @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); SimpleAdapteradapter=newSimpleAdapter(this,getData(),R.layout.simple,newString[]{"title","img"},newint[]{R.id.title,R.id.img}); setListAdapter(adapter); } privateList //map.put(参数名字,参数值) List Map map.put("title","摩托罗拉"); map.put("img",R.drawable.icon); list.add(map); map=newHashMap map.put("title","诺基亚"); map.put("img",R.drawable.icon); list.add(map); map=newHashMap map.put("title","三星"); map.put("img",R.drawable.icon); list.add(map); returnlist; } } 案例二 下面的程序是实现一个带有图片的类表。 首先需要定义好一个用来显示每一个列内容的xml,vlist.xml xmlversion="1.0"encoding="utf-8"? > android="android: orientation="horizontal"android: layout_width="fill_parent" android: layout_height="fill_parent"> id="@+id/img"android: layout_width="wrap_content"android: layout_height="wrap_content"android: layout_margin="5px"/> orientation="vertical"android: layout_width="wrap_content"android: layout_height="wrap_content"> id="@+id/title"android: layout_width="wrap_content"android: layout_height="wrap_content" android: textColor="#FFFFFFFF"android: textSize="22px"/> id="@+id/info"android: layout_width="wrap_content"android: layout_height="wrap_content" android: textColor="#FFFFFFFF"android: textSize="13px"/> publicclassMyListView3extendsListActivity{ //privateList @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); SimpleAdapteradapter=newSimpleAdapter(this,getData(),R.layout.vlist, newString[]{"title","info","img"}, newint[]{R.id.title,R.id.info,R.id.img}); setListAdapter(adapter); } privateList List Map map.put("title","G1"); map.put("info","google1"); map.put("img",R.drawable.i1); list.add(map); map=newHashMap map.put("title","G2"); map.put("info","google2"); map.put("img",R.drawable.i2); list.add(map); map=newHashMap map.put("title","G3"); map.put("info","google3"); map.put("img",R.drawable.i3); list.add(map); returnlist; } } 使用Impleader的数据用一般都是Hash Map构成的List,list的每一节对应Listie的每一行。 Hash Map的每个键值数据映射到布局文件中对应id的组件上。 因为系统没有对应的布局文件可用,我们可以自己定义一个布局alist.XML。 下面做适配,new一个Impleader参数一次是: this,布局文件(alist.XML),Hash Map的 title 和 info,IgM。 布局文件的组件id,title,info,IgM。 布局文件的各组件分别映射到Hash Map的各元素上,完成适配。 运行效果如下图: 3)SimpleCursorAdapter publicclassSimpleCursorAdapterActivityextendsListActivity{ @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); //获得一个指向系统通讯录数据库的Cursor对象获得数据来源 Cursorcur=getContentResolver().query(People.CONTENT_URI,null,null,null,null); startManagingCursor(cur); //实例化列表适配器 ListAdapteradapter=newSimpleCursorAdapter(this,android.R.layout.simple_list_item_1,cur,newString[]{People.NAME},newint[]{android.R.id.text1}); setListAdapter(adapter); } } 一定要以数据库作为数据源的时候,才能使用SimpleCursorAdapter,这里特别需要注意的一点是: 不要忘了在AndroidManifest.xml文件中加入权限 name="android.permission.READ_CONTACTS"> 效果如下: 4)BaseAdapter 有时候,列表不光会用来做显示用,我们同样可以在在上面添加按钮。 添加按钮首先要写一个有按钮的xml文件,然后自然会想到用上面的方法定义一个适配器,然后将数据映射到布局文件上。 但是事实并非这样,因为按钮是无法映射的,即使你成功的用布局文件显示出了按钮也无法添加按钮的响应,这时就要研究一下ListView是如何现实的了,而且必须要重写一个类继承BaseAdapter。 下面的示例将显示一个按钮和一个图片,两行字如果单击按钮将删除此按钮的所在行。 并告诉你ListView究竟是如何工作的。 vlist2.xml xmlversion="1.0"encoding="utf-8"? > android="android: orientation="horizontal"android: layout_width="fill_parent" android: layout_height="fill_parent"> id="@+id/img"android: layout_width="wrap_content"android: layout_height="wrap_content"android: layout_margin="5px"/> orientation="vertical"android: layout_width="wrap_content"android: layout_height="wrap_content"> id="@+id/title"android: layout_width="wrap_content"android: layout_height="wrap_content" android: textColor="#FFFFFFFF"android: textSize="22px"/> id="@+id/info"android: layout_width="wrap_content"android: layout_height="wrap_content" android: textColor="#FFFFFFFF"android: textSize="13px"/> id="@+id/view_btn"android: layout_width="wrap_content"android: layout_height="wrap_content" android: text="@string/s_view_btn"androi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- adapter 用法 总结