1、 item內(nèi)如果有button等控件時(shí),在監(jiān)聽listview的onitemclick事件時(shí)牵舵,焦點(diǎn)會(huì)被item內(nèi)的button、 imagebutton等控件搶走倦挂,從而導(dǎo)致在listview設(shè)置了onitemclick事件后不會(huì)被觸發(fā)畸颅。解決方法是在初始化item的時(shí)候屏蔽掉 其內(nèi)部button等控件的焦點(diǎn)獲取,具體方法可以在自定義item的根控件中調(diào)用:
[java] view plaincopy
setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
這樣就能阻塞字控件搶奪焦點(diǎn)方援,listview的onitemclick就能被正確觸發(fā)没炒,同時(shí)對(duì)item內(nèi)部的button等控件也沒有影響,他們?cè)诒稽c(diǎn)擊時(shí)照樣可以觸發(fā)自身的點(diǎn)擊事件犯戏。
2送火、 當(dāng)listview需要添加headerview時(shí),可以通過調(diào)用listview的addHeaderView(headView, null, false) 方法先匪,該方法還有一個(gè)重載方法 addHeaderView(headView);這兩個(gè)方法的區(qū)別是前一個(gè)方法可以控制header是否可以被 selected种吸,如果不想被selected則將第三個(gè)參數(shù)設(shè)置成false;
3呀非、 接著上面說的添加header坚俗,添加header時(shí)調(diào)用的addHeaderView方法必須放在listview.setadapter前面镜盯,意思很明 確就是如果想給listview添加頭部則必須在給其綁定adapter前添加,否則會(huì)報(bào)錯(cuò)猖败。原因是當(dāng)我們?cè)谡{(diào)用setAdapter方法時(shí)會(huì) android會(huì)判斷當(dāng)前l(fā)istview是否已經(jīng)添加header速缆,如果已經(jīng)添加則會(huì)生成一個(gè)新的tempadapter,這個(gè)新的 tempadapter包含我們?cè)O(shè)置的adapter所有內(nèi)容以及l(fā)istview的header和footer恩闻。所以當(dāng)我們?cè)诮olistview添加了 header后在程序中調(diào)用listview.getadapter時(shí)返回的是tempadapter而不是我們通過setadapter傳進(jìn)去的 adapter艺糜。如果沒有設(shè)置adapter則tempadapter與我們自己的adapter是一樣的。 listview.getadapter().getcount()方法返回值會(huì)比我們預(yù)期的要大判呕,原因是添加了header倦踢。
4送滞、接著上面的tempadapter說侠草,我們自定義adapter里面的getitem方法里面返回的position是不包括header的,是我們自定義adapter中數(shù)據(jù)position編號(hào)從0開始犁嗅,也就是說與我們傳進(jìn)去的list的位置是一樣的边涕。
[java] view plaincopy
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
Log.i("adapter", "position:"+position); //這個(gè)position就是我們數(shù)據(jù)的真實(shí)位置
}
而listview的onitemclick方法中:
[java] view plaincopy
public void onItemClick(AdapterView
headView和footerView都可以響應(yīng)onItemClick方法,headView的position為0褂微, footerView的position最大功蜓。
不過可以給headView和footerView設(shè)置OnClickListener來覆蓋OnItemClick,這樣宠蚂,你點(diǎn)擊headview或者footerView將觸發(fā)OnClickListener而不是onItemClick().