Gibt es einen guten Grund, dass ein ListView-Header eine Position einnimmt?

8

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 ().

    
Andrew 26.10.2010, 21:01
quelle

2 Antworten

21

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) .

    
mayconbordin 15.07.2012 13:54
quelle
1

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.

    
Nailuj 26.10.2010 21:59
quelle

Tags und Links