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 longdo dowolnego ListViewelementu, 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
longdołą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 longjak 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ą positionz 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 positionjest 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-1zassert false : "TODO"; return -1;