Ich habe gerade eine Kopfzeile zu meiner ListView hinzugefügt und ich muss eine Menge Code ändern, da die Kopfzeile im Grunde die Position 0 erreicht (dh die Cursor-Indizes meines CursorAdapter passen nicht zu den Indizes der Liste. Sie sind jetzt um 1). Warum? Das erscheint mir ein bisschen albern.
Der einzige Grund, warum ich mir vorstellen kann, ist, dass ein Entwickler auf den Header zugreifen möchte. Fein. Stellen Sie etwas wie getListView (). GetHeader ().
Aus irgendeinem Grund ist position
(aus onItemClick
) mit der Anzahl der Elemente in ListView
( nicht der Adapter ) verbunden, einschließlich Kopf- und Fußzeilen. Wenn Sie OnItemClickListener
festlegen, sollten Sie das angeklickte Element abrufen, indem Sie listView.getItemAtPosition(position)
anstelle von adapter.getItem(position)
aufrufen.
Eigentlich sollten Sie immer getItemAtPosition
verwenden, weil auf diese Weise ist es egal, ob Ihre ListView
Kopf- und Fußzeilen hat, und wenn Sie neue Kopfzeilen hinzufügen, müssen Sie Ihren Code nicht ändern.
Und wenn Sie nicht möchten, dass Ihre Kopfzeile auswählbar ist, sollten Sie sie auf folgende Weise hinzufügen: listView.addHeaderView(headerView, null, false)
.
Ich glaube, ein ListView
ist nichts mehr als eine Liste von View
-Elementen. Wenn Sie einen Header (oder eine Fußzeile für den Fall, es sollte keinen Unterschied machen) zu Ihrem ListView
hinzufügen, unterscheidet sich dieses Element grundsätzlich nicht von den anderen Elementen, die automatisch über ListAdapter
hinzugefügt werden. Der einzige kleine Unterschied ist, dass das Header (und Footer) -Element fest ist und nicht von der ListAdapter
mit der Liste beeinflusst wird - sie sind immernoch nichts anderes als normale Elemente.