Bagaimana cara mendapatkan nilai Spinner?

263

Di Android, saya mencoba untuk mendapatkan nilai Spinner yang dipilih dengan pendengar.

Apa cara terbaik untuk mendapatkan nilai pemintal?

Sam Dutton
sumber

Jawaban:

571
Spinner mySpinner = (Spinner) findViewById(R.id.your_spinner);
String text = mySpinner.getSelectedItem().toString();
dodo
sumber
11
"Nilai" cukup ambigu di sini. Ini mengambil judul item pemintal saat ini (seperti dalam, String yang ditampilkan kepada pengguna), tetapi tidak nilainya jika Anda memetakan array int ke pemintal misalnya.
A. Steenbergen
1
@Doge untuk mendapatkan nilai dari item yang dipilih seperti nilai integer misalnya kita harus membuat int [] valuesArray dan menyimpannya di fungsi onCreate mungkin dari arrays.xml sehingga kita dapat menggunakan valuesArray [(int) mySpinner.getSelectedItemId ()] untuk mendapatkan nilai integer
Belal mazlom
128

Spinner harus menjalankan acara "OnItemSelected" ketika sesuatu dipilih:

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
        Object item = parent.getItemAtPosition(pos);
    }
    public void onNothingSelected(AdapterView<?> parent) {
    }
});
Erich Douglass
sumber
Terima kasih - itu berhasil, meskipun saya perlu menambahkan tipe void return ke metode.
Sam Dutton
6
Apakah benar-benar tidak ada cara untuk mencapai ini tanpa mengandalkan posisi item?
Vinz
7
Bukan solusi yang sangat berguna jika Anda ingin membaca nilai pemintal tanpa mengandalkan acara pemilihan.
AndroidDev
3
@ Patrick Override anotasi tidak pernah diperlukan hanya memberitahu kompiler "Bisakah Anda memeriksa apakah override ini dilakukan dengan benar?"
SiXoS
1
Bagaimana dengan mendapatkan item yang dipilih default ketika tidak ada perubahan yang dilakukan padanya? @dodo adalah yang paling tepat.
Xtreme Biker
49

Katakan ini adalah xml Anda dengan entri pemintal (mis. Judul) dan nilai:

<resources>
    <string-array name="size_entries">
        <item>Small</item>
        <item>Medium</item>
        <item>Large</item>
    </string-array>

    <string-array name="size_values">
        <item>12</item>
        <item>16</item>
        <item>20</item>
    </string-array>
</resources>

dan ini adalah pemintal Anda:

<Spinner
    android:id="@+id/size_spinner"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:entries="@array/size_entries" />

Kemudian dalam kode Anda untuk mendapatkan entri:

Spinner spinner = (Spinner) findViewById(R.id.size_spinner);
String size = spinner.getSelectedItem().toString(); // Small, Medium, Large

dan untuk mendapatkan nilai:

int spinner_pos = spinner.getSelectedItemPosition();
String[] size_values = getResources().getStringArray(R.array.size_values);
int size = Integer.valueOf(size_values[spinner_pos]); // 12, 16, 20
lenooh
sumber
Terima kasih, ini seharusnya ada dalam dokumen ANDR resmi tentang pemintal, mereka hanya menunjukkan nilai yang didapat melalui Pendengar.
visual
ini persis apa yang saya cari
jet_choong
Solusi sempurna! android:entriesmembuatku bahagia.
coderpc
15

Ya, Anda dapat mendaftarkan pendengar melalui setOnItemSelectedListener(), seperti yang ditunjukkan di sini .

CommonsWare
sumber
Terima kasih - ini berhasil juga, dan (saya pikir) itu membuat kode lebih mudah dibaca.
Sam Dutton
14
View view =(View) getActivity().findViewById(controlId);
Spinner spinner = (Spinner)view.findViewById(R.id.spinner1);
String valToSet = spinner.getSelectedItem().toString();
gilix
sumber
12

Jika Anda sudah tahu item tersebut adalah String, saya lebih suka:

String itemText = (String) mySpinner.getSelectedItem();

Memanggil toString()sebuah Objectyang Anda tahu adalah Stringsepertinya jalan yang lebih bundaran daripada hanya melemparkan Objectke String.

Matt Logan
sumber
2

tambahkan setOnItemSelectedListener ke referensi pemintal dan dapatkan data seperti itu`

 mSizeSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int position, long l) {
            selectedSize=adapterView.getItemAtPosition(position).toString();
wafaa hilmy
sumber