android listview addHeaderView和addFooterView的注意事項

來源:互聯網
上載者:User

標籤:

1、 item內如果有button等控制項時,在監聽listview的onitemclick事件時,焦點會被item內的button、 imagebutton等控制項搶走,從而導致在listview設定了onitemclick事件後不會被觸發。解決方案是在初始化item的時候屏蔽掉 其內部button等控制項的焦點擷取,具體方法可以在自訂item的根控制項中調用:

 

[java] view plaincopy
  1. 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,如果已經添加則會產生一個新的tempadapter,這個新的 tempadapter包含我們設定的adapter所有內容以及listview的header和footer。所以當我們在給listview添加了 header後在程式中調用listview.getadapter時返回的是tempadapter而不是我們通過setadapter傳進去的 adapter。如果沒有設定adapter則tempadapter與我們自己的adapter是一樣的。 listview.getadapter().getcount()方法傳回值會比我們預期的要大,原因是添加了header。

4、接著上面的tempadapter說,我們自訂adapter裡面的getitem方法裡面返回的position是不包括header的,是我們自訂adapter中資料position編號從0開始,也就是說與我們傳進去的list的位置是一樣的。

 

[java] view plaincopy
  1. @Override  
  2. public View getView(int position, View convertView, ViewGroup parent) {  
  3. // TODO Auto-generated method stub  
  4. Log.i("adapter", "position:"+position);   //這個position就是我們資料的真實位置  
  5.   }  

而listview的onitemclick方法中:

 

[java] view plaincopy
  1. public void onItemClick(AdapterView

headView和footerView都可以響應onItemClick方法,headView的position為0, footerView的position最大。

不過可以給headView和footerView設定OnClickListener來覆蓋OnItemClick,這樣,你點擊headview或者footerView將觸發OnClickListener而不是onItemClick().

android listview addHeaderView和addFooterView的注意事項

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.