前幾天在項(xiàng)目中發(fā)現(xiàn)一個(gè)奇怪的bug,就是有一個(gè)自定義下拉刷新的ListView調(diào)用adapter的onItemClick方法中的position有問(wèn)題,比如我點(diǎn)擊第一條數(shù)據(jù)返回的position不是0而是1,這個(gè)問(wèn)題直觀的想法就是肯定自定義的ListView出了問(wèn)題,不過(guò)研究半天也沒(méi)發(fā)現(xiàn)什么bug,只是了解到自定義ListView是使用setHeaderView來(lái)實(shí)現(xiàn)下拉刷新的,遂上網(wǎng)搜索關(guān)于ListView添加Header會(huì)對(duì)position的影響,看到別人對(duì)ListView源碼的分析后,十分慚愧做了好幾年Android竟然連最常見(jiàn)的ListView的使用都有問(wèn)題。
好啦現(xiàn)在分享一下分析結(jié)果
當(dāng)我們?yōu)長(zhǎng)istView添加了Header之后,ListVIew會(huì)改造我們自己定義的adapter封裝為HeaderViewListAdapter,HeaderViewListAdapter主要處理的就是添加Header和Footer后的position位置的錯(cuò)誤,這個(gè)新的adapter可以通過(guò)原有的ListView的getAdapter方法獲得即onItemClick中的parent.getAdaper()獲取,當(dāng)我們想要獲取某個(gè)item時(shí)通過(guò)新的adapter的getItem或者getItemId方法即可,當(dāng)然我們也可以自己計(jì)算position表示的真正的item位置,用到的方法是ListVIew的getHeaderViewsCount方法,通過(guò)position減去getHeaderViewsCount獲取到的headerView的數(shù)量就可以得到實(shí)際item的位置。
最后分享一下參考的分析文章,當(dāng)然我還是推薦大家自己結(jié)合別人的分析閱讀以下相關(guān)的源代碼
http://blog.chengbo.net/2012/03/09/onitemclick-return-wrong-position-when-listview-has-headerview.html
http://blog.csdn.net/shuxiangxingkong/article/details/37691761
關(guān)于ListView有Header時(shí)onItemClick的position的問(wèn)題
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- 又到了更新博文的時(shí)間了,最近在看一本很不錯(cuò)的心理學(xué)書(shū)籍,名字叫做 《拖延心理學(xué)》,封面長(zhǎng)下面這樣子 書(shū)的內(nèi)容主要是...
- 簡(jiǎn)介 在Android開(kāi)發(fā)中ListView是比較常用的組件。 以列表的形式展示具體內(nèi)容。 并且能夠根據(jù)數(shù)據(jù)的長(zhǎng)度...
- Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
- 疆域遼闊的大地南邊 有一個(gè)正在快速發(fā)展的綠色城市 似乎每一個(gè)城市的蛻變,離不開(kāi)舊城改造的浩大工程 南寧,也不可幸免...