列表视图(ListView)
使用数组创建ListView十分简单,但能够定制的内容很少。把ListView作为AdapterView使用,可以通过Adapter控制每个列表项的外观和行为。
Adapter
Adapter本身只是一个接口,常用的实现类有:ArrayAdapter,SimpleAdapter, BaseAdapter.
使用ArrayAdapter创建ListView
ArrayAdapter由数组或List为列表项提供数据。列表项的外观用单独的xml布局文件控制,可以指定字号,
颜色,分割线颜色等。代码很简单,这里距不贴了。
使用SimpleAdapter创建ListView
假设,我们要创建一个类似于QQ好友列表的列表视图,如图:
每个列表项的对应的布局文件很简单:1个ImageView和2个TextView水平排列;2个TextView之间垂直排列。布局文件simple_item.xml如下。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<!-- 定义一个ImageView,用于作为列表项的一部分。 -->
<ImageView android:id="@+id/header"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="10dp"/>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<!-- 定义一个TextView,用于作为列表项的一部分。 -->
<TextView android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20dp"
android:textColor="#f0f"
android:paddingLeft="10dp"/>
<!-- 定义一个TextView,用于作为列表项的一部分。 -->
<TextView android:id="@+id/desc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="14dp"
android:paddingLeft="10dp"/>
</LinearLayout>
</LinearLayout>
要使用SimpleAdapter,首先需要建立一个List集合,用来保存所有的列表项。单个列表项的数据用
Map<String,?>
来保存,要填充几个组件就需要几个key-value键值对。创建SimpleAdapter对象时,需要传入5个参数。
- 第一个参数: this指针
- 第二个参数:即刚刚建立的List集合,集合中每个元素对应一个列表项
- 第三个参数:列表项界面的布局ID
- 第四个参数:该参数类型为String[],用来提取
map<String,?>
中对应key的值 - 第五个参数:类型为int[], 值为列表项中需要填充的组件的ID
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 创建一个List集合,List集合的元素是Map
List<Map<String, Object>> listItems =
new ArrayList<Map<String, Object>>();
for (int i = 0; i < names.length; i++)
{
Map<String, Object> listItem = new HashMap<String, Object>();
listItem.put("header", imageIds[i]);
listItem.put("personName", names[i]);
listItem.put("desc", descs[i]);
listItems.add(listItem);
}
// 创建一个SimpleAdapter
SimpleAdapter simpleAdapter = new SimpleAdapter(this, listItems,
R.layout.simple_item,
new String[] { "personName", "header" , "desc"},
new int[] { R.id.name, R.id.header , R.id.desc });
ListView list = (ListView) findViewById(R.id.mylist);
// 为ListView设置Adapter
list.setAdapter(simpleAdapter);