स्ट्रिंग्स के साथ नंबरपिकर विजेट का उपयोग करना


95

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

जवाबों:


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

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

यह ऊपर चुने गए उत्तर की तुलना में बहुत बेहतर है।
लिन लिनो

2
लेकिन जब मैं पाठ पर क्लिक करता हूं, तो नरम कीबोर्ड बाहर निकल जाता है और मैं पाठ को संपादित कर सकता हूं।
कंफ्यूज

14
@ArulxZ यदि आपने पहले ही इसका पता नहीं लगाया है, तो बस picker.setDescendersFocusability (ViewGroup.FOCUS_BLOCK_DESCENDANTS) को कॉल करें; कीबोर्ड को पॉप अप करने से रोकने के लिए।
करीम वरेला

इससे मुझे मदद मिली! लेकिन यह मान 0 प्रकट होता है और मैं इसे हटा नहीं सकता .. कोई विचार? मेरे बीनने वाले को समझाने के लिए 0, बेल्जियम, फ्रांस, यूनाइटेड किंगडम दिखाई देता है
user4292106

38
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];
  }
});

उम्मीद है की वो मदद करदे!


यह अब तक का सबसे अच्छा जवाब है।
समेट्रोन

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

यदि आप इसके बजाय setDisplayedValuesफ़ॉर्मैटर का उपयोग करते हैं , तो नंबरपिकर इसकी चौड़ाई को ठीक से नहीं मापेगा, इसलिए आपका पाठ ठीक से फिट होने पर भी क्लिप किया जा सकता है।
मैटवे रयबाकोव

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

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

अपडेट:

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

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 () अभी भी एक int लौटाएगा, इसलिए आप शायद देशों के नामों को उनके आईडी में मैप करना चाहते हैं।

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

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

ऐसा लगता है कि आप जो चाहते हैं उसका एक बेहतर काम कर रहे हैं तो उपरोक्त फ़ॉर्मेटर .. हालांकि यह प्रलेखन में उल्लेख नहीं किया गया है, इसलिए शायद सार्वजनिक रूप से हिस्सा नहीं है


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

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

@FunkTheMonk मैं setRange()डॉक्स में यह तरीका बिल्कुल नहीं खोज सका ! कोई विचार क्यों?
iTurki

कोई भी प्रलेखित विधि सार्वजनिक एपीआई का हिस्सा नहीं है - वे आधिकारिक तौर पर Google द्वारा समर्थित नहीं हैं और वे शायद भविष्य में बदल जाएंगे - आप अपने जोखिम पर उपयोग करते हैं।
फंकइमोंक

1
मेरे मामले में, इस समाधान में एक छोटा सा बग था, जब विकल्पों में से एक को छूते हुए, यह गड़बड़ हो गया या गायब हो गया, मुझे नहीं पता कि यह बहुत अच्छी तरह से क्यों है। नेन के जवाब में यह मुद्दा नहीं था। कोई भी मुझे बता सकता है कि क्या हो सकता है? वैसे भी, मुझे लगता है कि नान का जवाब बेहतर है और स्वीकृत जवाब होना चाहिए। लेकिन शायद मुझे कुछ याद आ रहा है?
19esp पर 19

8

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

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

        }
    });

0

इसने मेरे लिए काम किया।

public class YourClassName extends AppCompatActivity {

NumberPicker picker = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.your_activity_layout_file);

    picker = (NumberPicker) findViewById(R.id.pickerId_From_your_Layout_file);

     picker.setMinValue(0);
    picker.setMaxValue(3);
    picker.setDisplayedValues(new String[]{"English", "French","Kiswahili","عربى"});
}
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.