Eh bien, il semble que cette question pourrait trouver une réponse plus simple et plus directe ... :-)
En termes simples, Android vous permet de joindre un long
à n'importe quel ListView
élément, c'est aussi simple que cela. Lorsque le système vous informe de la sélection de l'utilisateur, vous recevez trois variables d'identification pour vous indiquer ce qui a été sélectionné:
- une référence à la vue elle-même,
- sa position numérique dans la liste,
- ce que
long
vous avez joint aux éléments individuels.
C'est à vous de décider lequel de ces trois est le plus facile à gérer dans votre cas particulier, mais vous avez le choix entre les trois à tout moment. Considérez cela long
comme une étiquette automatiquement attachée à l'élément, mais c'est encore plus simple et plus facile à lire.
Le malentendu sur ce qu'il fait habituellement découle d'une simple convention. Tous les adaptateurs doivent fournir un getItemId()
même s'ils n'utilisent pas réellement cette troisième identification. Ainsi, par convention, ces adaptateurs (y compris de nombreux exemples dans le SDK ou partout sur le Web) reviennent simplement position
pour une seule raison: c'est toujours unique. Pourtant, si un adaptateur revient position
, cela signifie vraiment qu'il ne veut pas du tout utiliser cette fonctionnalité, car elle position
est déjà connue, de toute façon.
Donc, si vous devez renvoyer une autre valeur que vous jugez appropriée, n'hésitez pas à le faire:
@Override
public long getItemId(int position) {
return data.get(position).Id;
}
getItemId()
dansArrayAdapter()
revient toujours-1
avecassert false : "TODO"; return -1;