Chà, có vẻ như câu hỏi này có thể được trả lời theo cách đơn giản và dễ hiểu hơn ... :-)
Nói một cách đơn giản, Android cho phép bạn đính kèm long
bất kỳ ListView
mục nào , thật đơn giản. Khi hệ thống thông báo cho bạn về lựa chọn người dùng, bạn sẽ nhận được ba biến xác định để cho bạn biết những gì đã được chọn:
- một tham chiếu đến chính quan điểm,
- vị trí số của nó trong danh sách,
- cái này
long
bạn gắn liền với các yếu tố cá nhân.
Tùy thuộc vào bạn để quyết định cái nào trong ba cái này là dễ nhất để bạn xử lý trong trường hợp cụ thể của bạn nhưng bạn có cả ba để lựa chọn mọi lúc. Hãy nghĩ về điều này long
như một thẻ tự động được gắn vào vật phẩm, chỉ có điều nó thậm chí còn đơn giản và dễ đọc hơn.
Sự hiểu lầm về những gì nó thường bắt nguồn từ một quy ước đơn giản. Tất cả các bộ điều hợp phải cung cấp getItemId()
ngay cả khi họ không thực sự sử dụng nhận dạng thứ ba này. Vì vậy, theo quy ước, những bộ điều hợp đó (bao gồm nhiều mẫu trong SDK hoặc trên toàn bộ web) chỉ đơn giản trở lại position
vì một lý do duy nhất: nó luôn luôn là duy nhất. Tuy nhiên, nếu một bộ chuyển đổi trả về position
, điều này thực sự có nghĩa là nó hoàn toàn không muốn sử dụng tính năng này, vì position
dù sao cũng đã biết.
Vì vậy, nếu bạn cần trả về bất kỳ giá trị nào khác mà bạn thấy phù hợp, vui lòng làm như vậy:
@Override
public long getItemId(int position) {
return data.get(position).Id;
}
getItemId()
ởArrayAdapter()
luôn trả về-1
vớiassert false : "TODO"; return -1;