Ich sehe diese Methoden als einen saubereren Ansatz für den Zugriff auf die Daten meiner Liste. Anstatt über so etwas wie direkt auf mein Adapterobjekt zuzugreifen, kann ich den Adapter myListData.get(position)
einfach so nennen adapter.get(position)
.
Das gilt auch für getItemId
. Normalerweise würde ich diese Methode verwenden, wenn ich eine Aufgabe basierend auf der eindeutigen ID eines Objekts in der Liste ausführen möchte. Dies ist besonders nützlich, wenn Sie mit einer Datenbank arbeiten. Die Rückgabe id
könnte ein Verweis auf ein Objekt in der Datenbank sein, an dem ich dann verschiedene Operationen ausführen könnte (Aktualisieren / Löschen / usw.).
Anstatt also vom Rohdatenobjekt aus auf die ID zuzugreifen, wie myListData.get(position).getId()
Sie es verwenden können adapter.getItemId(position)
.
Ein Beispiel dafür, wo ich das Gefühl hatte, diese Methoden verwenden zu müssen, war ein Projekt mit dem SeparatedListViewAdapter . Dieser Adapter kann mehrere verschiedene Arten von Adaptern enthalten, die jeweils Daten eines anderen Typs darstellen (normalerweise). Beim Aufrufen getItem(position)
von SeparatedListViewAdapter
kann das zurückgegebene Objekt unterschiedlich sein, je nachdem, in welchem "Abschnitt" Sie es senden.
Zum Beispiel, wenn Sie hatte zwei Abschnitte in der Liste (Obst und Süßigkeiten): Wenn Sie verwendet getItem(position)
und position
passiert auf ein Element in der sein Obst Abschnitt, würden Sie ein anderes Objekt erhalten , als wenn Sie aufgefordert , getItem(position)
mit position
Hinweis auf ein Element in der Süßigkeit Sektion. Sie können dann einen konstanten ID-Wert zurückgeben, getItemId(position)
der angibt, welche Art von Daten getItem(position)
zurückgegeben werden, oder verwenden instanceof
, um zu bestimmen, über welches Objekt Sie verfügen.
Abgesehen von dem, was ich erwähnt habe, hatte ich nie das Gefühl, dass ich diese Methoden wirklich anwenden musste
getItemId()
inArrayAdapter()
immer-1
mitassert false : "TODO"; return -1;