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?

Jawaban:


571
Spinner mySpinner = (Spinner) findViewById(R.id.your_spinner);
String text = mySpinner.getSelectedItem().toString();

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) {
    }
});

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

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 .


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();

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.


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();
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.