ListActivity---

来源:互联网 发布:ubuntu 用户组 编辑:程序博客网 时间:2024/05/16 16:14
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对象进行绑定,完整的代码如下:
      public void onCreate(Bundle savedInstanceState)
      {
           super.onCreate(savedInstanceState);
           List<Map<String,Object>>appItems = new ArrayList<Map<String,Object>>();
           //设置data参数的值,其中resIds和applicationNames保存列表项中相应组件的值
           for(int i = 0;i<applicationNames.length;i++)
           {
                 Map<Stirng,Object> appItem = new HashMap<String,Object>();
                 appItem.put("ivLogo",resIds[i]);
                 appItem.put("ivApplicationName",applicationNames[i]);
                 appItems.add(appItem);
             }
             SimpleAdapter simpleAdapter = new SimpleAdapter(this,appItems,R.layout.main,new String[]{"tvApplicationName","ivLogo"},new int[]{R.id.tvApplicationName,R.id.ivLogo});
             setListAdapter(simpleAdapter);
原创粉丝点击