Yah, sepertinya pertanyaan ini bisa dijawab dengan cara yang lebih sederhana dan langsung ... :-)
Sederhananya, Android memungkinkan Anda untuk melampirkan item longapa 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
longAnda 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 longsebagai 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 positiondengan satu alasan: selalu unik. Namun, jika adaptor kembali position, ini benar-benar berarti ia tidak ingin menggunakan fitur ini sama sekali, karena positionsudah 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-1denganassert false : "TODO"; return -1;