ListView與Adapter介紹

ListView種類

  • 透過ArrayAdapter建立的只有一維資訊的ListView
  • 透過SimpleAdapter建立的有二維資訊的ListView
  • 透過SimpleCursorAdapter的使用
  • 直接繼承BaseAdapter來建立自己的Adapter完成的全自訂ListView

透過橋接器(Adapter)建立的版面(Layouts)

當你的版面內容是會變動的或是無法預先偵測數量的,就可以使用AdapterView版面的子類別來執行的時候放置版面裡面的view元件。每一個AdapterView的子類別都會透過一個Adapter來綁定資料到版面裡。這個Adapter就像是要顯示的資料和AdapterView的中間角色;Adapter用來取得每一筆資料(例如:字串陣列或圖形陣列)後,然後轉換成可以在AdapterView上顯示的一個一個view元件。 常見需要透過adapter來使用的版面:

List View

顯示單行可以捲動的清單。

填充資料到Adapter

你可以透過把一個AdapterView像是ListViewGridView藉由綁定一個AdapterView實體到一個Adapter上,透過獲取來源資料自動建立出相同數量的view元件到AdapterView上。

Android內建有數種方便的Adapter用來將不同類型的資料建立成view元件群並轉換到AdapterView上顯示。

最常見的Adapter如下:

ArrayAdapter

當你的資料是陣列時會使用這種Adapter。預設情況下,ArrayAdapter透過呼叫toString()方法,取出每個陣列內的項目後建立一個一個TextView並將字串設定進去。

例如:你有一個字串陣列,然後你想把這些字串顯以ListView清單的方式顯示,初始化一個新的ArrayAdapter,透過建構式設定該ListView版面,接著把ArrayAdapter指定給ListView
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, myStringArray);
建構式裡需要的參數為:
  • 你的程式Context
  • 顯示每一筆資料的TextView的樣式
  • 字串陣列

接著只要透過呼叫ListView物件的setAdapter()
ListView listView = (ListView) findViewById(R.id.listview);
listView.setAdapter(adapter);

處理點擊事件

你可以透過實現AdapterView類別的OnItemClickListener介面來回應點擊事件,例如:
// Create a message handling object as an anonymous class.
private OnItemClickListener mMessageClickedHandler = new OnItemClickListener() 
{
    public void onItemClick(AdapterView parent, View v, int position, long id) 
    {
        // Do something in response to the click
    }
};

listView.setOnItemClickListener(mMessageClickedHandler);