Bueno, parece que esta pregunta podría responderse de una manera más simple y directa ... :-)
En pocas palabras, Android le permite adjuntar un long
a cualquier ListView
elemento, es así de simple. Cuando el sistema le notifica la selección del usuario, recibe tres variables de identificación para decirle qué se seleccionó:
- una referencia a la vista en sí,
- su posición numérica en la lista,
- esto
long
lo adjuntaste a los elementos individuales.
Depende de usted decidir cuál de estos tres es el más fácil de manejar en su caso particular, pero tiene los tres para elegir todo el tiempo. Piense en esto long
como una etiqueta adjunta automáticamente al elemento, solo que es aún más simple y fácil de leer.
El malentendido sobre lo que suele hacer se deriva de una simple convención. Todos los adaptadores deben proporcionar getItemId()
incluso si realmente no usan esta tercera identificación. Entonces, por convención, esos adaptadores (incluidos muchos en muestras en el SDK o en toda la web) simplemente regresan position
por una sola razón: siempre es única. Aún así, si un adaptador regresa position
, esto realmente significa que no quiere usar esta característica, ya que de position
todos modos ya se sabe.
Por lo tanto, si necesita devolver cualquier otro valor que le parezca, no dude en hacerlo:
@Override
public long getItemId(int position) {
return data.get(position).Id;
}
getItemId()
enArrayAdapter()
vuelve siempre-1
conassert false : "TODO"; return -1;