Spinner değeri nasıl alınır?


263

Android'de, bir dinleyici ile seçilen Spinner değerini almaya çalışıyorum.

Döndürücünün değerini almanın en iyi yolu nedir?

Yanıtlar:


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

11
"Değer" burada oldukça belirsiz. Bu, geçerli döndürücü öğesinin başlığını alır (örneğin, kullanıcıya görüntülenen Dize), ancak örneğin bir int dizisini döndürücüye eşlediyseniz değerini döndürmez.
A. Steenbergen

1
@ Tamsayı değeri gibi seçili öğenin değerini almak için doo örneğin int [] değerleriArray yapmalı ve tamsayı değeri elde etmek için değerleriArray [(int) mySpinner.getSelectedItemId ()] 'de onCreate işlevinde dosyalamalıyız.
Belal mazlom

128

Bir şey seçildiğinde Spinner bir "OnItemSelected" olayı başlatmalıdır:

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

Teşekkürler - işe yaradı, ancak yöntemlere geçersiz dönüş türü eklemek gerekiyordu.
Sam Dutton

6
Öğenin konumuna dayanmadan bunu başarmanın gerçekten bir yolu yok mu?
Vinz

7
Bir spinning değerini bir seçim olayına dayanmadan okumak istiyorsanız çok kullanışlı bir çözüm değildir.
AndroidDev

3
@Patrick Ek açıklama Geçersiz Kılma gerekli değildir, derleyiciye "Bu geçersiz kılmanın doğru yapılıp yapılmadığını kontrol edebilir misiniz?"
SiXoS

1
Herhangi bir değişiklik yapılmadığında varsayılan seçilen öğeyi almaya ne dersiniz? @ dodo en uygun olanı.
Xtreme Biker

49

Bu, spinner girişleri (yani başlıklar) ve değerlere sahip xml'niz olduğunu varsayalım:

<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>

ve bu sizin dönücünüz:

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

Sonra kodları almak için:

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

ve değerleri almak için:

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

Teşekkürler, bu çeviricideki resmi ANDR belgesinde olmalı, sadece Listener aracılığıyla değer kazandıklarını gösterdiler.
görsel

bu tam olarak ne arıyorum
jet_choong

Mükemmel çözüm! android:entriesgünümü şenlendirdin.
coderpc

15

Evet, buradasetOnItemSelectedListener() gösterildiği gibi üzerinden bir dinleyici kaydedebilirsiniz .


Teşekkürler - bu da çalıştı ve (bence) kodun okunmasını kolaylaştırır.
Sam Dutton

14
View view =(View) getActivity().findViewById(controlId);
Spinner spinner = (Spinner)view.findViewById(R.id.spinner1);
String valToSet = spinner.getSelectedItem().toString();

12

Öğenin zaten bir olduğunu biliyorsanız, Stringtercih ederim:

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

Arayan toString()bir de Objectbildiğine göre bir olduğunu Stringsadece döküm daha dolambaçlı yolu gibi görünüyor Objectiçin String.


2

spinner referansına setOnItemSelectedListener ekleyin ve böyle verileri alın '

 mSizeSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int position, long l) {
            selectedSize=adapterView.getItemAtPosition(position).toString();
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.