1. 程式人生 > >listview的addHeaderView和addFooterView的幾點筆記

listview的addHeaderView和addFooterView的幾點筆記

 setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS); 
這樣就能阻塞字控制元件搶奪焦點,listview的onitemclick就能被正確觸發,同時對item內部的button等控制元件也沒有影響,他們在被點選時照樣可以觸發自身的點選事件。
 
2、當listview需要新增headerview時,可以通過調 用listview的addHeaderView(headView, null, false) 方法,
該方法還有一個過載方法 addHeaderView(headView);這兩個方法的區別是前一個方法可以控制header是否可以被selected,如果不想被 selected則將第三個引數設定成false 
  
3、接著上面說的新增header,新增header時呼叫的 addHeaderView方法必須放在listview.setadapter前面,
意思很明確就是如果想給listview新增頭部則必須在給其繫結 adapter前新增,否則會報錯。
原因是當我們在呼叫setAdapter方法時會android會判斷當前listview是否已經新增 header,
如果已經新增則會生成一個新的HeaderViewListAdapter,這個新的HeaderViewListAdapter包含我們 設定的adapter所有內容以及listview的header和footer。
所以當我們在給listview添加了header後在程式中呼叫 listview.getadapter時返回的是tempadapter而不是我們通過setadapter傳進去的adapter。
如果沒有設定 adapter則HeaderViewListAdapter與我們自己的adapter是一樣的。 listview.getadapter().getcount()方法返回值會比我們預期的要大,原因是添加了header。