2012年3月13日 星期二

Android學習_客製化ListView_點擊後保持highlight

有時候我們會希望點擊完ListView上任一項目後,該項目可以highlight(高亮?),讓使用者清楚的對應目前內容;就想像上,應該會有一個屬性,把他設為true我們的ListView立刻就會有這一個功能?但想像總是美好的,這必須要客製化放入ListView的Adapter,才能正確無誤的顯示。

註:使用別種方法,有可能在ListView項目超出螢幕時產生重繪的錯亂,造成多筆變色或是變色項目亂跳的情況,所以完成後應先確認上述情況是否有發生。

若你並沒有已經客製化的Adapter,可以參考Android學習_客製化ListView_加上Button

----------------------實作----------------------
1. 對Adapter加工

A. 建立一記載點擊項次的變數

private int selectItem=-1;


B. 增加setSelectItem的公開方法

public void setSelectItem(int selectItem) {
this.selectItem = selectItem;
}


C. 於getView方法中,依照記載的項次變色。

if (position == selectItem) {
convertView.setBackgroundResource(R.drawable.green);
}
else {
convertView.setBackgroundResource(Color.TRANSPARENT);
}


2. 於ListView點擊時利用setSelectItem設定selectItem的值

private ListView.OnItemClickListener lv_itemClick = new ListView.OnItemClickListener(){
@Override
public void onItemClick(AdapterView parent,View v,int id,long arg3)
{
Btnadapter.setSelectItem(id);
Btnadapter.notifyDataSetInvalidated();
}
};

效果(綠色為上次點擊項目,藍色為預設手指目前點擊項目):

2 則留言:

匿名 提到...

Cannot make a static reference to the non-static method notifyDataSetInvalidated() from the type BaseAdapter

QQ

匿名 提到...

notifyDataSetChanged?

張貼留言