Bem, parece que essa pergunta poderia ser respondida de uma maneira mais simples e direta ... :-)
Simplificando, o Android permite anexar um long
a qualquer ListView
item, é simples assim. Quando o sistema notifica você sobre a seleção do usuário, você recebe três variáveis de identificação para informar o que foi selecionado:
- uma referência à própria visualização,
- sua posição numérica na lista,
- isso
long
você anexou aos elementos individuais.
Cabe a você decidir qual desses três é o mais fácil de lidar no seu caso particular, mas você tem todos os três para escolher o tempo todo. Pense nisso long
como uma tag anexada automaticamente ao item, apenas que é ainda mais simples e fácil de ler.
O mal-entendido sobre o que geralmente faz decorre de uma simples convenção. Todos os adaptadores precisam fornecer um getItemId()
mesmo que não usem essa terceira identificação. Portanto, por convenção, esses adaptadores (incluindo muitos exemplos no SDK ou em toda a Web) simplesmente retornam position
por um único motivo: é sempre único. Ainda assim, se um adaptador retornar position
, isso realmente significa que ele não deseja usar esse recurso, pois position
já é conhecido.
Portanto, se você precisar retornar qualquer outro valor que achar conveniente, sinta-se à vontade para fazê-lo:
@Override
public long getItemId(int position) {
return data.get(position).Id;
}
getItemId()
emArrayAdapter()
sempre retorna-1
comassert false : "TODO"; return -1;