2010-10-26 22 views
8

我剛剛添加了一個頭到我的ListView,我不得不改變一堆代碼,因爲頭本質上變成了位置0(意思是我的CursorAdapter的遊標索引沒有與列表的索引對齊,它們關閉現在減1)。爲什麼?這對我來說似乎有點愚蠢。ListView頭部佔據一個位置是否有很好的理由?

我能想出的唯一原因是開發人員可能想要訪問標題。精細。提供類似getListView()。getHeader()的東西。

+2

等待,直到你必須把你自己的部分標題。這是一場噩夢。 – Falmarri 2010-10-26 21:56:59

+0

只要您指的是與列表關聯的適配器,就不應該有任何錯誤的問題。添加頁眉/頁腳包裝您的適配器,併爲您做這些調整。 – 2010-10-26 22:19:57

+0

我可以把我自己的部分頭文件放在一邊。使用ArrayAdapter,我的節標題是實際的列表項。使用CursorAdapter時,每個項目都有一個標題作爲其視圖的一部分,但僅顯示每個部分的頂部項目。這兩種方法的問題是標題消失;所以你最終可能會得到一個包含項目的列表,而不知道它們在哪個標題下,因爲標題已經從屏幕的頂部滾動。我正在嘗試使用ListView標頭來解決這個問題,但顯然他們也滾動。 – Andrew 2010-10-27 14:33:57

回答

1

我相信ListView無非是View元素的列表了。如果您爲自己的ListView添加標題(或者頁腳),那麼該元素與通過ListAdapter自動添加的其他元素基本沒什麼區別。唯一的區別在於,頁眉(和頁腳)元素將被固定,並且不受ListAdapter對列表的影響 - 但它們仍然是普通元素。

21

出於某種原因,position(從onItemClick)是緊密相連的項目在ListView不是適配器)的數量,其中包括頁眉和頁腳。當您設置OnItemClickListener時,您應該調用listView.getItemAtPosition(position)而不是adapter.getItem(position)來檢索點擊的項目。

事實上,你應該總是使用getItemAtPosition,因爲這種方式不管你的ListView有頁眉和頁腳,並且如果你添加新的標題,你不需要改變你的代碼。

如果你不想讓你的頭可以進行選擇,你應該添加它以這種方式:listView.addHeaderView(headerView, null, false)

+0

不錯的一個。 +1從我身邊。 – 2012-09-13 11:21:50

相關問題