adapter使数据绑定到控件变得更加简单和灵活。
用途:
为容器提供子视图,利用视图的数据和元数据来构建每个子视图,ArrayAdapter、simpleCursorAdapter、ResourceCursorAdapter。
如果需要自定义适配器,可以扩展抽象类BaseAdapter。Adapter是数据UI之间的桥梁,它把后台数据与前段UI连接到一起,是一个展示数据的载体。
Android中常见的Adapter
BaseAdapter:
基础适配器,android BaseAdapter实现了ListAdapter和SpinnerAdapter的接口,GridView的适配器有实现了ListAdapter,所以,BaseAdapter对于Spinner、ListAdapter、GridView是通用的。BaseAdapter是一个抽象类,继承它的类要实现很多方法。
ArrayAdapter:
ArrayAdapter是BaseAdapter的之类,从BaseAdapter派生出来,它有BaseAdapter的所有功能。但是,ArrayAdapter可以直接使用泛型结构。ArrayAdapter比较简单,只能显示一行文本。细节会在后面说。
SimpleAdapter:
简单适配器,可以将静态数据映射到XML文件定义好的布局中。利用SimpleAdapter可以显示比较复杂的列表,比如,每行显示一些图片、文本啊等一些复杂/特殊效果,但它只是单纯的显示,若要在后期队列表进行修改,则不可以。SimpleAdapter具有最后的扩充性。
SimpleCursorAdapter:
SimpleCursorAdapter是一个专门用于将数据库表中的数据显示在ui组件中(eg,ListView)。在android中一些普通的Adaper对象也可以将数据库中的数据显示在界面上,但用普通的adapter工作量要大很多。SimpleCursorAdapter使用中主要是将Cursor的字段与ui的ID对应起来。SimpleCursorAdapter和ArrayAdapter使用上非常相似,可把SimpleAdapter理解为对数据库的一种简单结合,然后方便的把数据库中的内容以列表的形式展示出来。
ArrayAdapter使用
用ArrayAdapter做一个在ListView中显示文字的案例,非常简单,只显示一行文本:
//注意,android中创建ListView有两种方式
1、在layout布局文件中定义listview控件
2、直接让你的activity继承ListActivity
这里,我直接采用继承ListActivity来实现。
1.创建一个Android项目(本例中命名ArrayAdapterTest)
2. 2.在你的activity中的onCreate方法中开始构建一个ListView(这里是关键一步),关键代码如下:
public class ArrayAdapterActivity extends ListActivity{
public void onCreate(Bundle savedInstanceState)
{
//注意因为是直接继承的ListActivity,所以这里不用setContentView方法来显示一个UI
super.onCreate(savedInstanceState);
//定义一个String类型的数组来作为显示在ListView上的数据
String[] arr = { "孙悟空", "猪八戒", "唐僧" };
//构建一数组适配器,然后把上面定义的数组放到该适配器中
ArrayAdapter<String> adapter = new
ArrayAdapter<String>(this,android.R.layout.simple_list_item_multiple_choice,
arr);
// 设置该窗口显示列表
setListAdapter(adapter);
}
}
使用new ArrayAdapter<T>(context, resource, textViewResourceId)来连接ListView视图和数组数据,这三个参数分别表示=》context=》上下文,即所在Activity resource=》android中内置的一个布局样式,控制ListView以什么形式显示,根据需要选择.(注意它是系统定义好的,只显示一行文字)
textViewResourceId=》第三个参数就是数据源,要显示在ListView上的数据(即本例中定义的String数组)
下面说说SimpleCursorAdapter:
Api中是这么说的:An easy adapter to map columns from a cursor to TextViews or ImageViews defined in an XML file. You can specify which columns you want, which views you want to display the columns, and the XML file that defines the appearance of these views.
简单的说就是 方便把Cursor中得到的数据进行列表显示,并可以把指定的列映射到指定的TextView上。
import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.Contacts.People;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
/**
*
*
@author shangzhenxiang
*
*/
public class TestSimpleCursorAdapter extends Activity {
private ListView mListView;
private Cursor mCursor;
private SimpleCursorAdapter mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.testsimplecursoradapter);
mListView = (ListView) findViewById(R.id.mySimpleCursorList);
mCursor = getContentResolver().query(People.CONTENT_URI, null, null, null, null);
startManagingCursor(mCursor);
mAdapter = new SimpleCursorAdapter(TestSimpleCursorAdapter.this, android.R.layout.simple_expandable_list_
mListView.setAdapter(mAdapter);
}
}
mCursor = getContentResolver().query(People.CONTENT_URI, null, null, null, null);是先获得一个指向系统联系人的Cursor
startManagingCursor(mCursor);是指我们把Cursor交给这个Activity保管,这样Cursor便会和Activity同步,我们不用手动管理了。