Cóż, wydaje się, że na to pytanie można odpowiedzieć w prostszy i bardziej bezpośredni sposób ... :-)
Mówiąc najprościej, Android umożliwia dołączenie long
do dowolnego ListView
elementu, to takie proste. Gdy system powiadomi Cię o wyborze użytkownika, otrzymasz trzy zmienne identyfikujące, aby poinformować Cię, co zostało wybrane:
- odniesienie do samego widoku,
- jego numeryczna pozycja na liście,
- to
long
dołączyłeś do poszczególnych elementów.
Do Ciebie należy decyzja, który z tych trzech elementów jest dla Ciebie najłatwiejszy w Twoim konkretnym przypadku, ale cały czas masz do wyboru wszystkie trzy. Pomyśl o tym long
jak o tagu automatycznie dołączonym do przedmiotu, tyle że jest jeszcze prostszy i łatwiejszy do odczytania.
Nieporozumienie co do tego, co zwykle robi, wynika z prostej konwencji. Wszystkie adaptery muszą zapewniać getItemId()
nawet, jeśli w rzeczywistości nie używają tej trzeciej identyfikacji. Tak więc, zgodnie z konwencją, te adaptery (w tym wiele w przykładach w SDK lub w całej sieci) po prostu wracają position
z jednego powodu: są zawsze unikalne. Mimo to, jeśli adapter powróci position
, to naprawdę oznacza, że nie chce w ogóle korzystać z tej funkcji, ponieważ i tak position
jest już znana.
Jeśli więc chcesz zwrócić inną wartość, którą uważasz za stosowną, możesz to zrobić:
@Override
public long getItemId(int position) {
return data.get(position).Id;
}
getItemId()
wArrayAdapter()
zawsze wraca-1
zassert false : "TODO"; return -1;