1. 程式人生 > >關於ListView加入HeaderView之後,點選條目時獲得position引數移位的BUG修正

關於ListView加入HeaderView之後,點選條目時獲得position引數移位的BUG修正

        今天遇到一個問題,在ListView的時候,要在首部加一個輪播圖元件,呼叫的是ListView的(View v, Object data, boolean isSelectable)方法,這個方法可以把一個view放置到Listview的頂部顯示,也可以多次呼叫,使得多個view按照新增的順序,依次排列在ListView的頂部顯示。

        這樣做了之後是顯示是沒問題的,但是遇到一個問題就是在ListView的Adapter的構造方法中,要新增ListView的條目點選事件:mListView.setOnItemClickListener(this); 

        然後在Adapter裡面實現onItemClick(AdapterView<?> parent, View view, int position,long id)方法,在通過position取資料的時候發現一個問題,就是點選的條目錯位了,點選一個條目,結果響應事件變成了下一個條目對應的事件。

        經過探查之後發現,本來ListView條目的position是從0開始計算的:0,1,2...這樣,但是添加了一個Header之後,position變成了從1開始,於是需要手動修正一下這個postion的值。

        好在Android中有提供一個對應的API來得到HeaderView的數量,那就是ListView中的一個方法:(),這個方法可以得到這個ListView添加了多少個HeaderView,然後我們需要做的只是在使用position之前,修正一下:

// TODO 修正有Header的ListView的position的BUG
int headerViewsCount = listView.getHeaderViewsCount();//得到header的總數量
			
//得到新的修正後的position
int newPosition = position - headerViewsCount;


ok,問題解決。