南京学思XSuperNest使用addHeaderView注意事项
在做學(xué)思鋼板管理系統(tǒng)的項(xiàng)目中用到了addHeaderView,現(xiàn)在把注意事項(xiàng)記下來
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<?> arg0, View arg1, int arg2,long arg3)
arg2是當(dāng)前click的位置,這個(gè)位置是指在tempadapter中的位置,從0開始如果listview中添加了header則0代表header。
?
轉(zhuǎn)載于:https://www.cnblogs.com/njxsYJY/p/4979288.html
總結(jié)
以上是生活随笔為你收集整理的南京学思XSuperNest使用addHeaderView注意事项的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 同步传输和异步传输有什么区别
- 下一篇: 微软正式提供免费杀毒软件公测版下载