Praktische Unterschied Zwischen position und die Zeilen-id in onListItemClick()
Ich bin verwirrt über den Unterschied zwischen postion
und row id
im ListActivity.onListItemClick()
.
Die Dokumentation hat folgenden Wortlaut:
position The position of the view in the list
id The row id of the item that was clicked
Gibt es eine praktische Unterschied zwischen den beiden? Ich nehme an, da gibt es zwei verschiedene Parameter, daß es Situationen gibt, wo die Werte sind unterschiedlich, aber basierend auf der Formulierung in der Dokumentation, ist es schwer zu sehen, was dieser Unterschied sein kann. Ist es, dass einer von Ihnen halten, kann der Wert einer Datenbank-Zeile-ID, die eine Cursor
oder eine andere spezielle Fähigkeit?
- Sagen Sie die Liste sortiert. Dann die Lage wäre ganz anders, als die id. Position ist von oben nach unten und id ist eine eindeutige Kennung.
- Wie ist der einzigartige Bezeichner zugewiesen dann? Ist die Reihenfolge der Elemente in der ListView, wenn es zuerst aufgefüllt, bevor eine operation wie die Sortierung ist, die es geschafft?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einer position von 0 startet, von oben nach unten in der Listenansicht, in der Erwägung, dass, um ein ordentliches Zeilen-id ist es wichtig, dass der cursor, die ging an den adapter enthält eine Spalte namens '_id' Vertretung eindeutige id für jede Zeile in der Tabelle.
Wenn Sie einen ArrayAdapter,
position
undid
gleich werden. Die id wird der zurückgegebene Wert derAdapter.getItemId(int)
also, wenn Sie einen ArrayAdapter, es wird genauso sein, wie die position - eine schnelle Suche derArrayAdapter
- source-code zeigt, ist es mit return position; arbeiten aus der id ein._id
Feld, dann ist es sicher zu sagen, dass die position und die Zeilen-ID der gleiche sein wird?ListView
mit einem header anzeigen. In diesem Fall position = id + 1. Siehe meine AntwortDen Antwort von Fauler Ninja ist meist richtig, jedoch mit Blick auf den Fall der Verwendung eines
ArrayAdapter
mit einem header-Ansicht Hinzugefügt, durch den Aufruf derListView.addHeaderView(View)
Methode.Wenn Ihre Liste hat ein header-Element, es wird an position 0.
Also die erste "echte" Element in der Liste haben:
position
= 1id
= 0Im Allgemeinen
position
=id
+ number_of_header_viewsDies ist wichtig zu realisieren, wenn Sie sich entscheiden, fügen Sie eine header-Ansicht, um eine Liste in code, der bereits funktioniert.
Wenn Sie den Zugriff auf Ihre Artikel mit
position
, dann muss der code aktualisiert werden entlang der folgenden Zeilen:position - 1
als der indexid
als der indexListView.getItemAtPosition(int)
stattAdapter.getItem(int)
Siehe auch diese Frage für eine Verwandte Diskussion: