ListActivity实际上是ListView和Activity的结合体。也就是说,一个ListActivity就是只包含一个ListView组件的Activity。在ListActivity类内部通过代码来创建ListView对象,因此,使用ListActivity并不需要使用XML布局文件来定义ListView组件。
如果在某些Activity中只包含一个ListView,使用ListActivity是非常方便的。可以通过ListActivity类的setListActivity方法来设置Adapter对象。该方法相当于调用了ListView类的setAdapter方法。
也可以通过ListActivity类的getListView方法获得当前ListActivity的ListView对象,并像操作普通的ListView对象一样操作ListActivity中的ListView对象。
Android SDK还提供了更简单的方法来完成这个
工作 ,这就是SimpleAdapter类。SimpleAdapter类只有一个构造方法,其定义如下:
public SimpleAdpater(Context context,List<? extends Map<String,?>> data,int resource,String[] from,int[] to)
context一般用this来代替。data是一个List类型的参数,而List对象的元素类型一个Map<String ?>类型。先看一个本例所使用的布局文件(mail.xml)的内容,然后再说明data参数的含义。main.xml文件的内容如下:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content"> <ImageView android:id="@+id/ivLogo" android:layout_width="60dp" android:layout_height="60dp" android:src="@drawable/icon" android:paddingLeft="10dp" /> <TextView android:id="@+id/tvApplicationName" android:layout_width="wrap_content" android:layout_height="fill_parent" android:textSize="16dp" android:gravity="center_vertical" android:paddingLeft="10dp"/> </LinearLayout> 上面代码中定义两个组件:ImageView和TextView。这两个布局文件将作为列表项的模板来显示每一个列表项。因此,每个列表项都要根据不同情况设置ImageView图像和TextView文本。假设要添加两个列表项,就意味着设置4个值(每个列表项两个值)。每个
列表 项的值可以用一个Map对象来表示。key表示相应组件的Id值(在本例中是ivLogo和tvApplicationName),value表示具体值。在本例中,需要使用如下代码来设置这两个列表项的值:
Map<String,Object>item1 = new HashMap<String,Object>(); //设置第一个列表项的数据 item1.put("ivLogo",R.drawable.calendar); itme1.put("ivApplicationName","多功能日历“); Map<String,Object>item2 = new HashMap<String,Object>(); //设置第二个列表项的数据 item2.put("ivLogo",R.drawable.eoemarket); item2.put("ivApplicationName","eoemarket客户端"); List<Map<String,Object>>data= new ArrayList<Map<String,Object>>(); //将两个Map对象添加到List对象中,该对象就是SimpleAdapter构造方法的第二个参数值: String[] from = new String[]{"ivLogo","tvApplicationName"}; int[] to = new int[]{R.id.ivLogo,R.id.tvApplicationName}; 注意:from和to数组设置的组件的顺序要一致,也就是说,from的第n个元素要对应to的第n个元素。但from和to数组的顺序可以和data参数中设置列表项的顺序不一致。
在本例中onCreate()方法中使用上述方式创建了SimpleAdapter对象,并将该对象与ListActivity对象进行绑定,完整