Bueno, parece que esta pregunta podría responderse de una manera más simple y directa ... :-)
En pocas palabras, Android le permite adjuntar un longa cualquier ListViewelemento, 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
longlo 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 longcomo 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 positionpor 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 positiontodos 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-1conassert false : "TODO"; return -1;