Saya sedang mengerjakan proyek android dan saya menggunakan spinner yang menggunakan adaptor array yang diisi dari basis data.
Saya tidak dapat mengetahui bagaimana saya dapat mengatur item yang dipilih secara program dari daftar. Misalnya, dalam spinner saya memiliki item berikut:
- Kategori 1
- Kategori 2
- Kategori 3
Bagaimana saya secara terprogram membuat Kategori 2 item yang dipilih ketika layar dibuat. Saya berpikir mungkin mirip dengan c # IE Spinner.SelectedText = "Kategori 2" tetapi tampaknya tidak ada metode yang mirip dengan ini untuk Android.
spinner.setSelection()
. Itu akan bekerja dengan baik. Anda juga dapat membuat metode yang dapat membantu Anda mencocokkan indeks Anda dengan string mereka yang sebenarnya.Jawaban:
Gunakan berikut:
spinnerObject.setSelection(INDEX_OF_CATEGORY2)
.sumber
mySpinner.setSelection(arrayAdapter.getPosition("Category 2"));
Tidak satu pun dari jawaban ini yang memberi saya solusi, hanya bekerja dengan ini:
sumber
Anda dapat menggunakan seperti di atas:
& tentu saja Anda juga dapat memilih berdasarkan indeks secara langsung suka
sumber
Category 2
yang saya kira adalah sebuah String (dengan asumsi ia mencoba menggunakanSpinner.SelectedText = "Category 2"
) tetapi kode di atas adalah untuk along
.adapter.getItem(position)
, bukanadapter.getItemId(position)
.Beberapa penjelasan (setidaknya untuk Fragmen - tidak pernah mencoba dengan Aktivitas murni). Semoga ini membantu seseorang untuk memahami Android dengan lebih baik.
Jawaban paling populer oleh Arun George benar tetapi tidak berhasil dalam beberapa kasus.
Jawaban oleh Marco HC menggunakan Runnable yang merupakan upaya terakhir karena beban CPU tambahan.
Jawabannya adalah - Anda cukup memilih tempat yang benar untuk dipanggil ke setSelection () , misalnya berfungsi untuk saya:
Tapi itu tidak akan berfungsi di onCreateView () . Saya menduga itulah alasan ketertarikan pada topik ini.
Rahasianya adalah bahwa dengan Android Anda tidak dapat melakukan apa pun yang Anda inginkan dalam metode apa pun - oops :( - komponen mungkin tidak siap. Sebagai contoh lain - Anda tidak dapat menggulir ScrollView baik di onCreateView () maupun di onResume () ( lihat jawabannya di sini )
sumber
Untuk menemukan nilai dan memilihnya:
sumber
Mengapa Anda tidak menggunakan nilai Anda dari DB dan menyimpannya di ArrayList dan kemudian gunakan saja:
sumber
Solusi optimal adalah:
Untuk mendapatkan posisi item secara otomatis tambahkan pernyataan berikut
sumber
Anda dapat membuat metode generik untuk jenis pekerjaan ini seperti yang saya lakukan di UtilityClass saya
sumber
Anda dapat dengan mudah mengatur seperti ini
spinner.setSelection(1)
:, alih-alih 1, Anda dapat mengatur posisi daftar apa pun yang ingin Anda tampilkan.sumber
Saya memiliki SimpleCursorAdapter jadi saya harus menduplikasi data untuk menggunakan respose di posting ini. Jadi, saya sarankan Anda mencoba cara ini:
Saya pikir itu cara nyata
sumber
Ini bekerja untuk saya.
sumber
Jika Anda memiliki daftar kontak, Anda dapat melakukannya untuk ini:
sumber
Saya tahu itu sudah dijawab, tetapi kode sederhana untuk memilih satu item, sangat sederhana:
sumber
sumber
Ini dinyatakan dalam komentar di tempat lain di halaman ini, tetapi dianggap bermanfaat untuk menariknya ke dalam jawaban:
Bila menggunakan adaptor, saya telah menemukan bahwa
spinnerObject.setSelection(INDEX_OF_CATEGORY2)
kebutuhan terjadi setelah parasetAdapter
panggilan; jika tidak, item pertama selalu menjadi pilihan awal.Ini dikonfirmasi dengan meninjau kode AbsSpinner untuk
setAdapter
.sumber
Inilah yang saya gunakan di Kotlin:
sumber
indexOf
tidak dapat membuat kecocokan, maka itu kembali-1
, yang tampaknya menghasilkan nilai default yang dipilih olehspinner.setSelection
. Saya setuju dengan itu.Dalam kasus saya, kode ini menghemat hari saya:
sumber
Sebagian besar waktu
spinner.setSelection(i); //i is 0 to (size-1) of adapter's size
tidak bekerja. Jika Anda baru saja meneleponspinner.setSelection(i);
Itu tergantung pada logika Anda.
Jika tampilan terisi penuh dan Anda ingin memanggilnya dari antarmuka, saya sarankan Anda menelepon
Atau jika Anda ingin mengubah siklus aktivitas / fragmen, panggil seperti ini
sumber
Saya telah membuat beberapa fungsi ekstensi
Spinner
untuk memuat data dan melacak pemilihan item.Spinner.kt
Contoh penggunaan
sumber
Ini bekerja untuk saya:
Ini mirip dengan solusi @ sberezin tetapi memanggil setSelection () di onStart ().
sumber
Saya memiliki masalah yang sama sejak kemarin. Sayangnya item pertama dalam daftar array ditampilkan secara default di widget pemintal. Perputarannya adalah menemukan item yang dipilih sebelumnya dengan setiap elemen dalam daftar array dan menukar posisinya dengan elemen pertama. Ini kodenya.
sumber