1. 程式人生 > >Android——ListView實現簡單列表

Android——ListView實現簡單列表

            最近做一個black ant的溫控系統專案,裡面有很多列表項,但是用的時候,感覺封裝的已經挺好的了,自己拿過來改改程式碼就行了,所以用過之後也沒什麼感覺。現在趁著閒暇時間整理下簡單的ListView,體會下這個東西到底是怎麼個原理。

      首先看下實現效果:

       其中,每一條列表項加的是一個Image跟一個TextView,資料來源繫結在了TextView上面。

       首先,新增兩個layout檔案:

       列表(item)的佈局檔案:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">
    
    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher"
        />
    <TextView
        android:id="@+id/name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="lhc"
        />

</LinearLayout>

     接著是整個Activity的佈局檔案:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    
    <ListView
        android:id="@+id/lv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />

</LinearLayout>

    接著是Activity的程式碼:

public class ListDemo extends Activity{
	private String[] names;//模擬資料來源
	private ArrayList<HashMap<String,String>> listItem;//需求的資料結構
	private ListView mListView;//列表物件
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.listview_activity);
		initCtrl();//初始化元件
		mListView.setOnItemClickListener((OnItemClickListener)new OnItemClickListener(){
			@Override
			public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
					long arg3) {
				Toast.makeText(getBaseContext(), "您選擇了 :"+names[arg2], Toast.LENGTH_LONG).show();
			}
		});
	}

	/*初始化元件*/
	private void initCtrl() {
		mListView=(ListView)findViewById(R.id.lv);//獲得listView物件
		listItem=loadData();//載入資料
		SimpleAdapter listItemAdapter=new SimpleAdapter(getBaseContext(),/*指明瞭SimpleAdapter關聯的View的執行環境,也就是當前的Activity*/
				listItem,/*由Map組成的List,在List中的每條目對應ListView的一行,每一個Map中包含的就是所有在from引數中指定的key*/
				R.layout.listview_item,/*定義列表項的佈局檔案的資源ID,該資原始檔至少應該包含在to引數中定義的ID*/
				new String[]{"ItemName"},/*將被新增到Map對映上的Key*/
				new int[] {R.id.name}/*將繫結資料的檢視的Id跟from引數對應,這些被繫結的檢視元素應該全是TextView*/
				);
		//設定介面卡
		mListView.setAdapter(listItemAdapter);
	}

	/*模擬獲取資料來源過程*/
	private ArrayList<HashMap<String, String>> loadData() {
		names=new String[]{"can","pppbc","pbc","lhc","can","小火山"};
		listItem=new ArrayList<HashMap<String,String>>();
		//遍歷陣列
		for(int i=0;i<names.length;i++){
			HashMap<String,String> map=new HashMap<String,String>();
			String name=names[i];
			map.put("ItemName", name);//以鍵值對的形式儲存
			listItem.add(map);//將HashMap新增到list中
		}
		return listItem;
	}
}