2011-11-22 30 views
72

के साथ नंबरपिकर विजेट का उपयोग करना क्या पूर्णांक की बजाय स्ट्रिंग चुनने के लिए एंड्रॉइड नंबरपिकर विजेट का उपयोग करने का कोई तरीका है?स्ट्रिंग्स

उत्तर

180
NumberPicker picker = new NumberPicker(this); 
picker.setMinValue(0); 
picker.setMaxValue(2); 
picker.setDisplayedValues(new String[] { "Belgium", "France", "United Kingdom" }); 
+3

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

+0

यह उपरोक्त चुने गए उत्तर से काफी बेहतर है। –

+2

लेकिन जब मैं टेक्स्ट पर क्लिक करता हूं, तो सॉफ्ट कीबोर्ड पॉप आउट हो जाता है और मैं टेक्स्ट को संपादित कर सकता हूं। – Confuse

12
String value = String.valueOf(picker.getValue()); 

आप कुछ और मतलब कर सकते हैं, लेकिन यह स्पष्ट नहीं है कि आपका क्या मतलब है।

UPDATED:

आप कर सकते हैं नकली इसे अपने फ़ॉर्मेटर की स्थापना द्वारा:

CountryFormatter implements Formatter { 
    public String toString(int value) { 
     switch(value) { 
      case 0: 
       return "England"; 
      case 1: 
       return "France"; 
     } 
     return "Unknown"; 
    } 
} 

picker.setFormatter(new CountryFormatter()); 

getValue() अभी भी एक पूर्णांक वापस आ जाएगी, तो आप शायद उनके आईडी के लिए देशों के नाम करना चाहते हैं।

जोड़ा: NumberPicker के कार्यान्वयन है:

public void setRange(int start, int end, String[] displayedValues) 

कौन क्या आप तो ऊपर फ़ॉर्मेटर चाहते .. का एक बेहतर काम कर रहा है, हालांकि यह दस्तावेज में उल्लेख नहीं है तो शायद isn ' सार्वजनिक एपीआई के टी हिस्सा

+0

मैं इसे उपयोग करने के लिए उदाहरण के लिए कोई देश चुनें करना चाहते हैं। स्पिनर विजेट की तरह ही, लेकिन मूल्य चुनने के लिए नीचे एक अतिरिक्त फ्रेम खोलने के बिना। – timoschloesser

+0

अद्यतन उत्तर, हालांकि इस तरह की चीज करने के लिए नंबरपिकर हैक करने की कोशिश करने के बजाय देशों को सूचीबद्ध करने के शायद बेहतर तरीके हैं। – FunkTheMonk

+0

@FunkTheMonk मुझे दस्तावेज़ों में यह 'setRange() 'विधि नहीं मिल सका! कोई विचार क्यों? – iTurki

30
NumberPicker numberPicker = new NumberPicker(this); 
String[] arrayString= new String[]{"hakuna","matata","timon","and","pumba"}; 
numberPicker.setMinValue(0); 
numberPicker.setMaxValue(arrayString.length-1); 

numberPicker.setFormatter(new NumberPicker.Formatter() { 
    @Override 
    public String format(int value) { 
    // TODO Auto-generated method stub 
    return arrayString[value]; 
    } 
}); 

आशा व्यक्त की कि मदद करता है!

+0

पाता है यह अब तक का सबसे अच्छा जवाब है। – samatron

+0

क्लासिक तरीका, उत्तर के लिए धन्यवाद। – Pankaj

+0

यदि यह एक सरणी है, तो इसमें आकार() नहीं है और() विधियां प्राप्त करें। आकार() को। लम्बाई के साथ प्रतिस्थापित किया जाना चाहिए, और सरणीस्ट्रिंग [मान] – RexSplode

4

इस समाधान का प्रयास करें, मदद मिल सकती है आप

NumberPicker pickers = new NumberPicker(this); 
    String[] arrayPicker= new String[]{"abc","def","ghi","jkl","mno"}; 

    //set min value zero 
    pickers.setMinValue(0); 
    //set max value from length array string reduced 1 
    pickers.setMaxValue(arrayPicker.length - 1); 
    //implement array string to number picker 
    pickers.setDisplayedValues(arrayPicker); 
    //disable soft keyboard 
    pickers.setDescendantFocusability(NumberPicker.FOCUS_BLOCK_DESCENDANTS); 
    //set wrap true or false, try it you will know the difference 
    pickers.setWrapSelectorWheel(false); 

    //create button to test selected text string 
    btnPicker.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      //get position (int) from number picker 
      int pos = pickers.getValue(); 
      //get string from number picker and position 
      String selecPicker = arrayPicker[pos]; 
      //test toast to get selected text string 
      Toast.makeText(context, selecPicker , Toast.LENGTH_SHORT).show(); 

     } 
    }); 
संबंधित मुद्दे