Yah, sepertinya pertanyaan ini bisa dijawab dengan cara yang lebih sederhana dan langsung ... :-)
Sederhananya, Android memungkinkan Anda untuk melampirkan item long
apa pun ListView
, sesederhana itu. Ketika sistem memberi tahu Anda tentang pilihan pengguna, Anda menerima tiga variabel pengenal untuk memberi tahu Anda apa yang dipilih:
- referensi ke tampilan itu sendiri,
- posisi numeriknya dalam daftar,
- ini
long
Anda lampirkan pada elemen individual.
Terserah Anda untuk memutuskan mana dari ketiganya yang paling mudah untuk Anda tangani dalam kasus khusus Anda, tetapi Anda memiliki ketiganya untuk dipilih setiap saat. Anggap ini long
sebagai tag yang secara otomatis dilampirkan pada item, hanya saja itu lebih sederhana dan lebih mudah dibaca.
Kesalahpahaman tentang apa yang biasanya terjadi berasal dari konvensi sederhana. Semua adaptor harus memberikan getItemId()
bahkan jika mereka tidak benar-benar menggunakan identifikasi ketiga ini. Jadi, berdasarkan konvensi, adaptor tersebut (termasuk banyak sampel dalam SDK atau seluruh web) kembali position
dengan satu alasan: selalu unik. Namun, jika adaptor kembali position
, ini benar-benar berarti ia tidak ingin menggunakan fitur ini sama sekali, karena position
sudah diketahui.
Jadi, jika Anda perlu mengembalikan nilai lain yang Anda inginkan, jangan ragu untuk melakukannya:
@Override
public long getItemId(int position) {
return data.get(position).Id;
}
getItemId()
diArrayAdapter()
selalu mengembalikan-1
denganassert false : "TODO"; return -1;