List加入headView后點擊position錯亂有關問題

添加headview會換adapter

1.從源碼中可以分析得到,addHeaderView(View v, Object data, boolean isSelectable)方法

@Override public void setAdapter(ListAdapter adapter) { if (null !=   mAdapter) {       mAdapter.unregisterDataSetObserver(mDataSetObserver); } resetList(); mRecycler.clear(); if (mHeaderViewInfos.size() > 0|| mFooterViewInfos.size() > 0) { mAdapter = new HeaderViewListAdapter(mHeaderViewInfos, mFooterViewInfos,     adapter); } else { mAdapter = adapter; } //其它的一些代碼這里省略之... }
  • 當有headView的時候,就不能再用adapter.getItem(position),而需要通過parent獲取到adapter,再進行操作,parent.getAdapter().getItem(position) 這樣獲取到的Item,就是我們想要的結果了。
  • addHeaderView()方法:主要是向listView的頭部添加布局 addFooterView()方法:主要是向listView的底部添加布局

可修正
@Override public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
doSomething(parent.getAdapter().getItem(position)); }

手動修正

page=channel&keyword=listView).getHeaderViewsCount;//得到header的總數量 //得到新的修正后的position int newPosition = position - headerViewsCount。
可參考這篇文章

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容