ListView需要绑定数据源,除了ArrayAdapter和SimpleAdapter可以和ListView关联之外,SimpleCursorAdapter也是一种常见的和ListView进行关联的数据源,不过SimpleCursorAdapter是ListView需要数据库数据作为数据源进行数据绑定时使用的。
关于AndroidManifest.xml中一般都有类似如下的描述信息:
-----------------------------------------------------------------------------------------------------------------------
<activity android:name=".ActivityMain"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
-----------------------------------------------------------------------------------------------------------------------
其中的intent-filter中的<action>和<category android:name=”android.intent.category.LAUNCHER”来说明当在程序启动的时候首先启动ActivityMain这个activity.
关于ArrayAdapter:
-----------------------------------------------------------------------------------------------------------------------
ListView listView = new ListView(this);
//用Context为参数新建一个ListView(列表)实例;
listView.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,data));
//listView和ArrayAdapter进行绑定;ListAdapter继承于Adapter,是//ListView和里面数据的适配器。希望一个ListView显示出来,需要3个东西:
//ListView(需要被显示的东西);
//Data,和ListView绑定的数据,一般是一个Cursor或者一个字符串数组;
//ListAdapter,是data和ListView的桥梁,一个适配器作用;
setContentView(listView);
-----------------------------------------------------------------------------------------------------------------------
关于ArrayAdapter:
ArrayAdapter是ListAdapter的一个直接子类,它的作用是一个数组和ListView之间的桥梁,它可以将数组里面定义的数组一一对应的显示在ListView里面。通常由ArrayAdapter进行适配的ListView每一项通常只有一个TextView
关于android系统默认的布局方式:
项目中自己定义的布局方式可以通过R.layout.XX访问;Android系统提供了很多种默认的布局方式,经常用的包括如下布局:
android.R.layout.simple_list_item_1,每一项只有一个TextView;
android.R.layout.simple_list_item_2,每一项只有两个TextView;
android.R.layout.simple_list_item_single_choice,每一项有一个TextView,但是这一项可以被选择。
关于SimpleAdapter:
SimpleAdapter也是ListAdapter的直接子类。通过SimpleAdapter可以让ListView当中的每一项内容更加个性化;通常将ListView中某项的布局信息写在一个XML的布局文件中,布局文件通过R.layout.XX获得;
ArrayAdapter是数组和ListView间的桥梁,而SimpleAdapter是ArrayList<Map<String,?>>和ListView之间的桥梁;ArrayList当中的每一项Map对象都和ListView当中的一项进行数据绑定和一一对应。
SimpleAdapter的构造函数:
SimpleAdapter(Context context,List<? extents Map<String,?>> data,int resource,String[] from , int[] to);
Context:应用的上下文环境;
Data:基于Map的List。Data里边的每一项是一个Map类型,这个Map类中包含了ListView中每一行需要的数据,比较常用的用法:data = new ArrayList<Map<String,Object>>();
Resource:这个Resource就是一个layout,这个layout最起码要包含在to中出现的那些View。一般用系统提供的就ok了,当然也可以自己定义。系统提供的有:android.R.layout.simple_list_item_single_choice,android.R.layout.two_line_list_item等;
From:一个名字的数组,每个名字是为了在ArrayList中的每一个item中索引Map<String,Object>的Object用的;
To:里面是一个TextView的数组,这些TextView是以id的形式来标示的;
代码示例:
--------------------------------------------------------------------------------------------------------------------------
public class ActivityList2 extends Activity {
List<Map<String,String>> data;
//ListView中的每一项都包含两个TextView,系统将data[i].get("姓名")的值显示在id为mview1的TextView上,
//将data[id].get("性别")的值显示在id为mview2的TextView上;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
prepareData();
//新建一个ListView;
ListView listView = new ListView(this);
//SimpleAdapter adapter = new SimpleAdapter(this,data,R.layout.listitem,new String[]{"姓名","性别"}, new int[]{R.id.mview1,R.id.mview2});
// listitem规定了ListView当中每一项的布局; {"姓名","性别"}listView通过item.get()获得值
SimpleAdapter adapter = new SimpleAdapter(this,data,android.R.layout.two_line_list_item,new String[]{"姓名","性别"},new int[]{android.R.id.text1,android.R.id.text2});
listView.setAdapter(adapter);
setContentView(listView);
setTitle("ActivityList2");
}
//准备一个Map类型的ArrayList对象;
private void prepareData(){
data = new ArrayList<Map<String,String>>();
Map<String,String> item = new HashMap<String,String>();
item.put("姓名", "张三小朋友");
item.put("性别", "男");
data.add(item);
item = new HashMap<String,String>();
item.put("姓名", "王五同学");
item.put("性别", "男");
data.add(item);
item = new HashMap<String,String>();
item.put("姓名", "小李师傅");
item.put("性别", "女");
data.add(item);
}
}
--------------------------------------------------------------------------------------------------------------------------
增加事件监控机制:
AdapterView.OnItemClickListener;
代码示例:
--------------------------------------------------------------------------------------------------------------------------
OnItemClickListener listener = new OnItemClickListener(){
public void onItemClick(AdapterView<?> parent,View view,int position,long id){
setTitle(parent.getItemAtPosition(position).toString());
}
};
listview.setOnItemClickListener(listener);
--------------------------------------------------------------------------------------------------------------------------