Bagaimana Anda dapat mengatur pendengar acara untuk Spinner ketika item yang dipilih berubah?
Pada dasarnya apa yang saya coba lakukan adalah sesuatu yang mirip dengan ini:
spinner1.onSelectionChange = handleSelectionChange;
void handleSelectionChange(Object sender){
//handle event
}
android
events
spinner
android-spinner
Soni Ali
sumber
sumber
Jawaban:
Beberapa jawaban sebelumnya salah. Mereka berfungsi untuk widget dan tampilan lain, tetapi dokumentasi untuk widget Spinner dengan jelas menyatakan:
Lebih baik gunakan OnItemSelectedListener () sebagai gantinya:
Ini bekerja untuk saya.
Perhatikan bahwa metode onItemSelected juga dipanggil saat tampilan sedang dibuat, sehingga Anda dapat mempertimbangkan untuk memasukkannya ke dalam
onCreate()
pemanggilan metode.sumber
onItemSelected(...)
tidak kena. (Saya tahu karena saya baru menemukan ini dengan cara yang sulit.)Catatan: Ingat satu hal.
OnItemSelectedListener
Acara Spinner akan dieksekusi dua kali:Cobalah untuk membedakan keduanya dengan menggunakan variabel flag.
sumber
Anda dapat mengimplementasikan
AdapterView.OnItemSelectedListener
kelas dalam Aktivitas Anda.Dan kemudian gunakan baris di bawah ini
onCreate()
Kemudian timpa kedua metode ini:
sumber
https://stackoverflow.com/q/1714426/811625
Anda dapat menghindari OnItemSelectedListener () dipanggil dengan cek sederhana: Simpan indeks pilihan saat ini dalam variabel integer dan periksa di dalam onItemSelected (..) sebelum melakukan apa pun.
Misalnya:
Karena
iCurrentSelection
harus dalam lingkup objek agar ini bekerja!sumber
iCurrentSelection
variabel dideklarasikan dalam kelas anonim ini, ia akan berfungsi dengan baik. Anda dapat menginisialisasi ke -1 sehingga kode dieksekusi pada panggilan pertama.Temukan nama pemintal Anda dan temukan id kemudian terapkan metode ini.
sumber
Tidak masalah apakah Anda mengatur OnItemSelectedListener di onCreate atau onStart - itu akan tetap dipanggil selama pembuatan atau mulai Kegiatan (masing-masing).
Jadi kita bisa mengaturnya di onCreate (dan TIDAK di onStart!).
Cukup tambahkan bendera untuk mengetahui inisialisasi pertama:
lalu di onCreate (atau onCreateView) cukup:
sumber
Dokumen untuk widget pemintal mengatakan
Anda harus menggunakan
setOnItemSelectedListener
untuk menangani masalah Anda.sumber
sumber
ambil variabel global untuk pemilihan pemintal saat ini:
sumber
Jika Anda menginginkan onChangedListener () yang benar. Simpan nilai awal di handler dan periksa untuk melihat apakah sudah berubah. Ini sederhana dan tidak memerlukan variabel global. Berfungsi jika Anda memiliki lebih dari satu pemintal di halaman.
...
Objek adalah teman Anda, gunakan.
sumber
sumber
Ini akan bekerja menginternalisasi spinner dan findviewbyid dan gunakan ini akan bekerja
sumber
Cara terbaik apa yang saya pikir akan memiliki
flagitemselected = 0;
dionCreate()
. Dan pada item yang dipilih kenaikan acara yaitu benderaflagitemselected++
; lalu periksaSaya kira ini akan membantu.
sumber
Satu trik yang saya temukan adalah meletakkan setOnItemSelectedListeners Anda di onWindowFocusChanged alih-alih onCreate. Saya belum menemukan efek samping buruk untuk melakukannya dengan cara ini, belum. Pada dasarnya, atur pendengar setelah jendela ditarik. Saya tidak yakin seberapa sering onWindowFocusChanged berjalan, tetapi cukup mudah untuk membuat diri Anda sendiri sebagai variabel kunci jika Anda mendapati itu berjalan terlalu sering.
Saya pikir Android mungkin menggunakan sistem pemrosesan berbasis pesan, dan jika Anda memasukkan semuanya ke dalam onCreate, Anda dapat mengalami situasi di mana pemintal akan diisi setelah ditarik. Jadi, pendengar Anda akan mati setelah Anda mengatur lokasi item. Ini adalah tebakan yang terdidik, tentu saja, tetapi jangan ragu untuk mengoreksi saya dalam hal ini.
sumber
Secara default, Anda akan mendapatkan item pertama dari array pemintal melalui
setiap kali Anda memilih nilai dalam pemintal ini akan memberi Anda nilai yang dipilih
jika Anda menginginkan posisi item yang dipilih maka lakukanlah seperti itu
dua jawaban di atas adalah untuk tanpa menerapkan pendengar
sumber