Görünüşe göre bu soru daha basit ve daha açık bir şekilde cevaplanabilir ... :-)
Basitçe söylemek gerekirse, Android longherhangi 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
longtek 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) positiontek 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ü positionzaten 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-1ileassert false : "TODO"; return -1;