android--------listview之適配器

ListView之適配器的使用,包含了ArrayAdapter,SimpleAdapter ,BaseAdapter等適配器。

1:ArrayAdapter

/****
 *
 *
 * ArrayAdapter
 * @author Administrator
 *
 */
public class ArrayAdapterActivity extends Activity {
 
   private ListView mListView;
    //定義一個String數組,數組裏的數據就是ListView裏的一項
   String[] arrayDate={"笑傲江湖","風清揚","令狐沖","嶽不羣","喬峯","虛竹","段譽","中神通","東邪","西毒","南帝","北丐"};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_arrayadapter);
        initView();
    }
    private void initView() {
      mListView=(ListView)findViewById(R.id.listView1);
      //新建一個數組適配器ArrayAdapter綁定數據,參數(當前的Activity,佈局文件,數據源)
      //android.R.layout.simple_list_item_1      自己自帶佈局
      ArrayAdapter<String>  adapter=new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1,arrayDate);
      //視圖(ListView)加載適配器
      mListView.setAdapter(adapter);
      mListView.setOnItemClickListener(new OnItemClickListener() {
 
         @Override
         public voidonItemClick(AdapterView<?> parent, View view,
                int position,long id) {
           
            Toast.makeText(ArrayAdapterActivity.this,arrayDate[position],1).show();
           
         }
      });
   }
   
}

預覽效果:android

 

2:SimpleAdapter

 

使用simpleAdapter的數據用通常都是HashMap構成的List,list的每一節對應ListView的每一行。HashMap的每一個鍵值數據映射到佈局文件中對應id的組件上。數組

概括步驟:

一、準備數據源:指定由Map組成的List數據源ide

二、新建適配器,設置鍵值名和對應控件id,綁定數據函數

三、視圖加載適配器佈局

參數:

new SimpleAdapter(context, data, resource, from, to)this

context  ------SimpleAdapter關聯的View的運行環境 spa

data  ---------一個Map組成的List。在列表中的每一個條目對應列表中的一行,每個map中應該包含全部在from參數中指定的鍵.net

resource ------ 一個定義列表項的佈局文件的資源ID。佈局文件將至少應包含那些在to中定義了的IDcode

from ---------- 一個將被添加到Map映射上的鍵名對象

to  -------------將綁定數據的視圖的ID,跟from參數對應

/****
 *
 *
 * SimpleAdapter
 *
 * @author Administrator
 *
 */
public class  SimpleAdapterActivity extends Activity {
 
   private ListView mshow_list;
   String[] name = { "張三","李四","小星星","靜靜","明明","小張" };
 
   int[] img = {R.drawable.a2, R.drawable.a3,R.drawable.a4, R.drawable.a5,R.drawable.a6,R.drawable.ic_launcher};
   protected void  onCreate(android.os.Bundle savedInstanceState) {
     
      super.onCreate(savedInstanceState);
      //加載佈局文件
      setContentView(R.layout.activity_simpleadapter);
      //2.獲取listview控件的對象
      mshow_list=(ListView)findViewById(R.id.show_listview);
     
      /**
       * 第四步:定義SimpleAdapter(並加載對應item佈局文件,得到對應的keY,得到對應item佈局文件中的組件的id
       *
       * 第二個參數data:數據源
       * 第三個參數resource :listView每一個item對應的佈局文件
       * 第四個參數 from:
       * 第五個參數to:
       *new String[]{對應的key}v
       */
      SimpleAdapter simpleAdapter=new SimpleAdapter(this, get_data(),
            R.layout.item_simple,new String[]{
         "type","age","img"},newint[]{R.id.type_txt,R.id.age_txt,R.id.img});
     
      //第五步:經過setAdapter將適配器綁定到listView控件
      mshow_list.setAdapter(simpleAdapter);
           
     
     
   };
 
   /***
    * 數據源
    *
    *
    */
   private  ArrayList<Map<String, Object>> get_data() {
      // 定義一個ArrayList的集合(集合中又封裝一個map類型的集合)
      ArrayList<Map<String, Object>>data_list = new ArrayList<Map<String,Object>>();
      for (int i = 0; i<name.length; i++) {
         // key,value intstring map不能new map
         Map<String, Object> data_map = newHashMap<String, Object>();
         data_map.put("type", name[i]);
         data_map.put("age", i + 10+"歲");
         data_map.put("img", img[i]);
         // 將map集合添加(封裝)到ArrayList集合中
         data_list.add(data_map);
 
      }
      // 返回ArrayList集合
      return data_list;

   }
}

預覽效果:

 

3:BaseAdapter

使用BaseAdapter實現複雜的ListView的步驟:

1 首先準備好須要顯示在LiseView中的數據 ——List

2 而後編寫2 個XML 文件 第一個文件是ListView控件所在的佈局文件 第二個文件是ListVIew中每個item的佈局文件

3 建立一個繼承自BaseAdapter的類

4 爲ListView綁定適配器 setAdapter(繼承BaseAdapter 類的實例)

5 用傳統方式來覆寫適配器的getView函數和getCount 函數(從參數convertView裏映射佈局文件,find各個控件填充數據)

6 加入ViewHolder類(定義n個控件的聲明)用convertView.setTag(viewHolder)在View和Object之間關聯,此目的是節省find屢次的時間。
public class MyAdapter extends BaseAdapter {

   private String[] datas;
   private LayoutInflater inflater;
   private int[] imgs;
   public MyAdapter(Contextcotext, String[] datas,int[] imgs) {
      this.datas = datas;
       inflater =LayoutInflater.from(cotext);
       this.imgs=imgs;
   }
 
   /**
    *
    * 返回的item總數量
    *
    */
   public intgetCount() {
      return datas.length;
   }
 
   /**
    *
    * item的位置
    *
    */
   @Override
   public Object getItem(int position){
      // TODOAuto-generated method stub
      return datas[position];
   }
 
   /**
    *
    * 對應每一個item裏面控件的id
    *
    */
   @Override
   public longgetItemId(int position) {
      // TODOAuto-generated method stub
      return position;
   }
 
   @Override
   public View getView(int position,View convertView, ViewGroup parent) {
 
      ViewHolde viewHolde = null;
     
      if (null ==convertView) {
         // 實例化 ViewHolde對象
 
      viewHolde = newViewHolde();
         convertView = inflater.inflate(
                R.layout.item_listview,null);
         viewHolde.img=(ImageView)convertView.findViewById(R.id.img);
         viewHolde.mtype_txt =(TextView) convertView
                .findViewById(R.id.text);
        
         convertView.setTag(viewHolde);
 
      }
     
      else {
         viewHolde = (ViewHolde)convertView.getTag();
      }
     
      viewHolde.mtype_txt.setText(datas[position]);
      viewHolde.img.setImageResource(imgs[position]);
      // 返回item視圖
      returnconvertView;
 
   }
 
   class ViewHolde {
      TextView mtype_txt;
      ImageView img;
   }
 
}

預覽效果:

 

 

項目源碼:

http://download.csdn.net/detail/dickyqie/9609752

相關文章
相關標籤/搜索