item - list view android studio




Praktischer Unterschied zwischen Position und Zeilen-ID in onListItemClick() (2)

Ich bin verwirrt über den Unterschied zwischen postion und row id in ListActivity.onListItemClick() .

Die Dokumentation enthält Folgendes:

position  The position of the view in the list
id        The row id of the item that was clicked

Gibt es einen praktischen Unterschied zwischen den beiden? Ich nehme an, da es zwei verschiedene Parameter gibt, dass es Situationen gibt, in denen die Werte unterschiedlich sind, aber basierend auf der Formulierung in der Dokumentation, ist es schwer zu sehen, was dieser Unterschied sein könnte. Kann einer von ihnen den Wert einer Datenbankzeilen-ID halten, die von einem Cursor oder einer anderen speziellen Funktion bereitgestellt wird?


Position : Die Position der Ansicht in der Liste
id : Die Zeilen-ID des Elements, auf das geklickt wurde

Eine Position beginnt bei 0, von oben nach unten in der ListView. Um eine richtige Zeilen-ID zu erhalten, ist es wichtig, dass der Cursor, der an den Adapter übergeben wurde, eine Spalte namens '_id' enthält, die eine eindeutige ID für jede Zeile in der Tabelle darstellt .

Wenn Sie einen ArrayAdapter verwenden, werden position und id gleich. Die ID ist der zurückgegebene Wert von Adapter.getItemId(int) Wenn Sie also ein ArrayAdapter verwenden, entspricht dies der Position. Eine schnelle Suche im ArrayAdapter Quellcode zeigt an, dass die Rückgabeposition verwendet wird. die ID ausarbeiten.


Die Antwort von Lazy Ninja ist größtenteils korrekt, übersieht jedoch den Fall, dass ein ArrayAdapter mit einer Header-Ansicht verwendet wird, die durch Aufrufen der ListView.addHeaderView(View) -Methode hinzugefügt wurde.

Wenn Ihre Liste ein Kopfzeilenelement enthält, befindet es sich an Position 0.

Also wird der erste "echte" Gegenstand in der Liste haben:

  • position = 1
  • id = 0

Im Allgemeinen ist position = id + number_of_header_views

Dies ist wichtig, wenn Sie sich entscheiden, einer Liste in Code, der bereits ordnungsgemäß funktioniert, eine Kopfzeile hinzuzufügen.

Wenn Sie über position auf Ihre Artikel zugreifen, muss Ihr Code in den folgenden Zeilen aktualisiert werden:

  • Verwenden Sie position - 1 als Index
  • Verwende id als Index
  • Verwenden Sie ListView.getItemAtPosition(int) anstelle von Adapter.getItem(int)

Siehe auch diese Frage für verwandte Diskussion:





android-listview