7ListView3

鴨脖發表於2012-07-14
下面我們來實現當listview中的某項被選中時如何新增響應函式:


這裡我們需要知道在android中有這麼一個類,他的名字叫做AdapterView,其實ListView是從這個類繼承而來的
那麼在這個類中,實現了一個介面,這個介面叫做OnItemClickListener,這是一個監聽器,用來監聽AdapterView中
的元件被選中這個事件,在這個介面中有一個方法,叫做 onItemClick,用來響應不同item被點選時所觸發的事件。


開發者對於這個方法的說明如下:
public abstract void onItemClick (AdapterView<?> parent, View view, int position, long id)


Since: API Level 1
Callback method to be invoked when an item in this AdapterView has been clicked.
Implementers can call getItemAtPosition(position) if they need to access the data associated with the selected item.
Parameters


parent The AdapterView where the click happened.
view The view within the AdapterView that was clicked (this will be a view provided by the adapter)
position The position of the view in the adapter.
id The row id of the item that was clicked.


在這裡我們可以根據position的值來確定哪個item被點選了,注意position是從0開始的。
id其實和position是一樣的。


我們只需要對ListView物件進行setOnItemClickListener(),然後再在這個OnItemClickListener
的類定義中過載onItemClick()函式,便可以進行事件的響應


對於第一個引數,指的是這個adapter容器,我們可以使用getChildAt()函式來獲得這個位置上的view。
以下程式碼通過上述方法實現了當item被選中時的背景色設定(注意不是點選時的背景色):


private int oldPosition = -1;
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
if(oldPosition != -1){
   arg0.getChildAt(oldPosition).setBackgroundColor(Color.TRANSPARENT);
  }
  oldPosition = arg2;
  arg1.setBackgroundColor(Color.GRAY);
}