ListView是一個相當常用的元件,在android的APP中隨處可見。ListView的使用常常與多筆資料結合,在android的架構中,ListView要跟Adapter結合使用,如下圖所示
以下我會針對兩種最常見的Adapter作介紹,首先是SimpleAdapter,顧名思義就知道這種Adapter的使用方式非常容易,程式碼如下。
package com.example.android.listviewtest;
import android.app.Activity;
import android.os.Bundle;
import android.widget.AdapterView.OnItemClickListener;
import android.view.*;
import android.widget.*;
import java.util.HashMap;
import java.util.ArrayList;
import java.util.List;
public class ListviewTest extends Activity {
private ListView mListView;
ArrayList<HashMap<String,String>> mList = new ArrayList<HashMap<String,String>>();
private static final String[] mGoods = new String [] {"PC", "NB", "TAB", "SmartPhone", "Monitor"};
private static final String[] mPrice = new String [] {"100", "200", "300", "400", "500"};
@Override
public void onCreate() void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.listview_test);
mListView = (ListView)findViewById(R.id.list);
for(int i = 0; i < 4; i++) {
HashMap<String,String> item = new HashMap<String,String>();
item.put("goods", mGoods[i]);
item.put("price", mPrice[i]);
mList.add(item);
}
SimpleAdapter sAdapter;
sAdapter = new SimpleAdapter(this, mList, R.layout.itemlayout, new String[] {"goods","price"}, new int[] {R.id.textView1, R.id.textView2} );
mListView.setAdapter(sAdapter);
mListView.setTextFilterEnabled(true);
mListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick() void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
addNewItem();}
});
}
public void addNewItem() void addNewItem() {
HashMap<String,String> item = new HashMap<String,String>();
item.put("goods", mGoods[4]);
item.put("price", mPrice[4]);
mList.add(item);
SimpleAdapter sAdapter;
sAdapter = new SimpleAdapter(this, mList,
R.layout.itemlayout,
new String[] { "goods","price" },
new int[] {R.id.textView1, R.id.textView2});
mListView.setAdapter(sAdapter);
mListView.setTextFilterEnabled(true);
}
}
下面是itemlayout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:background="#282828"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="6dip"
android:layout_marginTop="6dip"
android:textAppearance="?android:attr/textAppearanceLarge">
</TextView>
<TextView android:id="@+id/textView2"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall">
</TextView>
</LinearLayout>
上面是個簡單的範例,透過ArrayList加上SimpleAdapter再加上ListView所做出來的List模式的選單。
1. 首先我們透過ArrayList儲存我們要的資料
2. 然後把這些資料丟到SimpleAdapter裡面
3. 最後再把SimpleAdapter設定到ListView裡面就可以了
簡簡單單的三個步驟就可以達到我們要的功能

但是如果要動態增加ListView的內容該怎麼做?根據SimpleAdapter的文件,該作者原本只是設計給static的資料使用,那我們應該如何動態增加?我唯一想到的方式就是重新產生新的SimpleAdapter,如我程式碼中addNewItem這個函式。如果有更好的方式,也歡迎看到本文的提出來指點一下。