1 ArrayAdapter

只可以简单的显示一行文本

ArrayAdapter<String> adapter = new ArrayAdapter<String>(  
                                   this,  
                                   R.layout.item, //只能有一个定义了id的TextView  
                                   data); //data既可以是数组,也可以是List集合  

 

2 SimpleAdapter

可以显示比较复杂的列表,包括每行显示图片、文字等,但不能对列表进行后期加工,也是只是单纯的负责显示(当然可以设计复杂点的布局来显示复杂列表),例如,每行显示不同背景等。

List<Map<String,Object>> mData= new ArrayList<Map<String,Object>>();;  
for(int i =0; i < lengh; i++) {      
    Map<String,Object> item = new HashMap<String,Object>();      
    item.put("image", R.drawable.portrait);      
    item.put("title", mListTitle[i]);      
    item.put("text", mListStr[i]);      
    mData.add(item);       
}      
SimpleAdapter adapter = new SimpleAdapter(  
                this,  
                mData,        //Map 列表选项
                R.layout.item,   //item布局   
                new String[]{"image","title","text"},       // Map对象中的key
                new int[]{R.id.image, R.id.title, R.id.text});  // item 布局中的 控件id

在ListActivity的onCreate()中:setListAdapter(adapter);   //ListActivity不用setContentView()

 

3 BaseAdapter

可以实现复杂的列表布局,由于BaseAdapter是一个抽象类,使用该类需要自己写一个适配器继承该类,需要我们重写一些方法,让我们可以在代码里控制列表的样式,更加灵活。

    public class MyBaseAdapter extends BaseAdapter{  
            private LayoutInflater mInflater;  
           public MyAdapter(Context context){  
          this.mInflater = LayoutInflater.from(context);
       } @Override        
public int getCount() { return mData.size(); } public Object getItem(int arg0) { return null; } public long getItemId(int arg0) { return 0; } public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; if (convertView == null) { holder = new ViewHolder(); convertView = mInflater.inflate(R.layout.vlist2, null); holder.info = (TextView)convertView.findViewById(R.id.info); convertView.setTag(holder); // 为之后get做准备 }else //重复利用,以节省内存 holder = (ViewHolder)convertView.getTag(); holder.info.setText((String)mData.get(position).get("info")); return convertView; }    public final class ViewHolder{ // 内部类   public TextView info;        }    }

 

public class MyBaseAdapter extends BaseAdapter

          private LayoutInflater mInflater

          public MyAdapter(Context context){  this.mInflater = LayoutInflater.from(context);  } 

            @Override 

public int getCount() {  return mData.size();  } 

            public Object getItem(int arg0) {  return null;  } 

            public long getItemId(int arg0) { return 0;    } 

            public View getView(int position, View convertView, ViewGroup parent) { 

                ViewHolder holder = null; 

                if (convertView == null) { 

                    holder = new ViewHolder();  

                    convertView = mInflater.inflate(R.layout.vlist2, null);  

                    holder.info = (TextView)convertView.findViewById(R.id.info); 

                    convertView.setTag(holder);  // 为之后get做准备

                }else    //重复利用,以节省内存

                    holder = (ViewHolder)convertView.getTag();  

                holder.info.setText((String)mData.get(position).get("info"));   

                return convertView; 

            } 

      public final class ViewHolder{   // 内部类

            public TextView info; 

}

}