2009-12-22 28 views
197

एंड्रॉइड में, मैं श्रोता के साथ चयनित स्पिनर मान प्राप्त करने का प्रयास कर रहा हूं।स्पिनर मूल्य कैसे प्राप्त करें?

स्पिनर के मूल्य को प्राप्त करने का सबसे अच्छा तरीका क्या है?

+1

आपको निश्चित रूप से [डोडो का जवाब] स्वीकार करना चाहिए (http://stackoverflow.com/a/7486969/1747491)। – theblang

उत्तर

478
Spinner mySpinner=(Spinner) findViewById(R.id.your_spinner); 
String text = mySpinner.getSelectedItem().toString(); 
+7

"वैल्यू" यहां बहुत अस्पष्ट है। यह वर्तमान स्पिनर आइटम शीर्षक (जैसे, स्ट्रिंग जो उपयोगकर्ता को प्रदर्शित होता है) को पुनर्प्राप्त करता है, लेकिन उदाहरण के लिए स्पिनर पर एक int सरणी मैप करने पर इसका मूल्य नहीं है। –

+1

@Doge उदाहरण के लिए पूर्णांक मान का मूल्य प्राप्त करने के लिए हमें int [] मानों को बनाना चाहिए और इसे एरेज़.एक्सएमएल से क्रेट फ़ंक्शन पर बनाना चाहिए ताकि हम मानों का उपयोग कर सकें Irray [(int) mySpinner.getSelectedItemId()] पूर्णांक मान प्राप्त करने के लिए –

11

हां, आप के माध्यम से श्रोता को पंजीकृत कर सकते हैं, जैसा कि here प्रदर्शित किया गया है।

+0

धन्यवाद - यह भी काम करता है, और (मुझे लगता है) यह कोड को पढ़ने में आसान बनाता है। –

112

स्पिनर एक "OnItemSelected" घटना है जब कुछ चयनित है सक्रिय किया जाना चाहिए:

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

धन्यवाद - यह काम करता है, हालांकि मुझे विधियों में शून्य रिटर्न प्रकार जोड़ने की आवश्यकता है। –

+6

क्या आइटम की स्थिति पर भरोसा किए बिना इसे हासिल करने का कोई तरीका नहीं है? – Vinz

+5

यदि आप चयन ईवेंट पर भरोसा किए बिना स्पिनर मूल्य को पढ़ना चाहते हैं तो बहुत उपयोगी समाधान नहीं है। – AndroidDev

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

आप पहले से ही पता आइटम एक String है, तो मैं पसंद करते हैं:

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

toString() को Object पर कॉल करना जो आपको पता है String एक और जैसा लगता है Object को String पर कास्टिंग करने के बजाय राउंडअबाउट पथ।

33

कहो इस स्पिनर प्रविष्टियों और मूल्यों के साथ अपने xml है (यानी खिताब।):

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

और यह आपकी स्पिनर है: प्रविष्टियों पाने के लिए

<Spinner 
    android:id="@+id/size_spinner" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:entries="@array/size_entries" /> 
फिर अपने कोड में

:

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

और प्राप्त करने के लिए मान:

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

Thx, यह स्पिनर पर आधिकारिक एंड्रॉइड दस्तावेज़ में होना चाहिए, वे केवल श्रोता के माध्यम से मूल्य प्राप्त करना दिखाते हैं। – visual

+0

यह वही है जो मैं देख रहा हूं –

संबंधित मुद्दे