Görünüşe göre bu soru daha basit ve daha açık bir şekilde cevaplanabilir ... :-)
Basitçe söylemek gerekirse, Android long
herhangi bir ListView
öğeye a eklemenize izin verir , bu kadar basit. Sistem kullanıcı seçimini size bildirdiğinde, neyin seçildiğini söylemek için üç tanımlayıcı değişken alırsınız :
- görünümün kendisine bir referans,
- listedeki sayısal konumu,
- bunu
long
tek tek unsurlara bağladınız.
Bu üç durumdan hangisinin sizin durumunuz için en kolay olduğuna karar vermek size kalmıştır, ancak her üçünden de seçim yapabilirsiniz. Bunu long
, öğeye otomatik olarak eklenen bir etiket olarak düşünün , sadece daha basit ve okunması daha kolay.
Genellikle yaptığı şeyle ilgili yanlış anlaşılma, basit bir sözleşmeden kaynaklanmaktadır. Tüm bağdaştırıcılar, getItemId()
bu üçüncü kimliği gerçekten kullanmasalar bile , bir adaptör sağlamalıdır . Bu nedenle, konvansiyonel olarak, bu adaptörler (SDK'daki veya web'deki birçok örnek dahil) position
tek bir nedenden dolayı geri döner : her zaman benzersizdir. Yine de, bir adaptör getiri ise position
, bu gerçek anlamı o tüm bu özelliği kullanmak istemiyor çünkü position
zaten bilinmektedir zaten.
Bu nedenle, uygun gördüğünüz başka bir değeri iade etmeniz gerekiyorsa, bunu yapmaktan çekinmeyin:
@Override
public long getItemId(int position) {
return data.get(position).Id;
}
getItemId()
içindeArrayAdapter()
daima döndürür-1
ileassert false : "TODO"; return -1;