2010-05-31 35 views
17

में मान सेट करना और टेक्स्ट प्रदर्शित करना मुझे स्पिनर में मूल्य सेट करने और टेक्स्ट प्रदर्शित करने में सहायता चाहिए। अब प्रति के रूप में मैं सरणी एडाप्टर, उदा,एंड्रॉइड स्पिनर

mySpinner.setAdapter(myAdapter); 

और जहाँ तक इस प्रदर्शन टेक्स्ट और एक ही स्थान पर स्पिनर का मूल्य करने के बाद मुझे पता है के रूप में ही है के आधार पर अपना स्पिनर को आबाद करने कर रहा हूँ। स्पिनर से प्राप्त होने वाली दूसरी विशेषता आइटम पर स्थिति है।

अब मेरे मामले में मैं ड्रॉप डाउन बॉक्स की तरह स्पिनर बनाना चाहता हूं, जो हमारे पास .NET में है।

जिसमें एक पाठ और मूल्य है।

जहां टेक्स्ट प्रदर्शित होता है और मूल्य पीछे की ओर होता है। इसलिए यदि मैं ड्रॉप डाउन बॉक्स बदलता हूं, तो मैं या तो अपने चयनित टेक्स्ट या मान का उपयोग कर सकता हूं। लेकिन यह एंड्रॉइड स्पिनर मामले में नहीं हो रहा है।

उदाहरण के लिए:

पाठ मूल्य
बिल्ली 10
माउंटेन 5
स्टोन 9
मछली 14
नदी 13
कमर 17

तो ऊपर सरणी से मैं केवल प्रदर्शित कर रहा हूँ निर्जीव पाठ वस्तुओं, और क्या मैं चाहता हूँ जब उपयोगकर्ता उनका चयन मैं जब पर्वत चयनित की तरह मैं पाने के 5

मैं इस आशा वहाँ मूल्य यानी मिलता है कि है अपने पाठ और मान युग्म

चरण # 2 के लिए एक डाटा मॉडल बनाएं:: बढ़ाएँउदाहरण मेरे सवाल में थोड़ा और अधिक स्पष्ट ...

thankx

+0

एक और बढ़िया विकल्प आप इसे एक मौजूदा डेटा स्रोत से नहीं मिल रहे हैं और यह सिर्फ प्रदर्शन लेख की एक स्थिर सरणी है कि अगर और मूल्य एक एनम है। यदि आप रुचि रखते हैं तो मुझे बताएं और मैं एक उत्तर पोस्ट करूंगा। –

+0

इसे अभी के लिए देखें: http://stackoverflow.com/a/37266810/293280 –

उत्तर

11

चरण # 1 बना दियाया ArrayAdapter अपने डेटा मॉडल के आसपास लपेटो करने, getView() अधिभावी जो कुछ भी आप में प्रदर्शित करना चाहते हैं वापस जाने के लिए Spinner ही

चरण # 3: एक चयन घटना पर, स्थिति का उपयोग अपने डेटा मॉडल में इसी वस्तु को खोजने के लिए और बस ArrayAdapter<YourModelClass> का उपयोग करें और YourModelClass पर toString() ओवरराइड जो कुछ भी प्रदर्शन वापस जाने के लिए - मूल्य

देखो यदि आप केवल इतना Spinner में प्रदर्शित करना चाहते हैं डेटा मॉडल में प्रत्येक तत्व की सिर्फ एक पाठ प्रतिनिधित्व है, तो आप कस्टम Adapter को छोड़ सकते हैं पाठ जो आप चाहते हैं

+0

मॉडल में toString() गायब था, सुझाव के लिए धन्यवाद! – cking24343

15

यदि आप अपना खुद का एडाप्टर-क्लास बनाने के माध्यम से नहीं जाना चाहते हैं तो आप स्पिनर में जो दिखाना चाहते हैं उसे लौटने के लिए आपको उस डेटा में डेटा को लपेट सकते हैं।मैं इस तरह एक वर्ग का उपयोग करें:

public class TextItemPair<T> { 
    private String text; 
    private T item; 
    public TextItemPair(String text, T item) { 
      this.text = text; 
      this.item = item; 
    } 
    public String getText() { 
     return text; 
    } 
    public T getItem() { 
     return item; 
    } 
    @Override 
    public String toString() { 
     return getText(); 
    } 
} 

और जब स्पिनर परिवर्तन:

public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
    YourTypeHere t = ((TextItemPair<YourTypeHere>)spinner.getItemAtPosition(position)).getItem(); 
} 
+0

यदि आपके पास टेक्स्टव्यू कस्टम क्लास @ ओवरराइड सार्वजनिक स्ट्रिंग टूस्ट्रिंग() { वापसी getText() है तो यह पर्याप्त है। } –

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