2013-01-06 14 views
7

पर श्रोता जोड़ना मैं अपने आवेदन में एक नंबर पिकर को एकीकृत करने पर काम कर रहा हूं। गतिविधि प्रत्येक नंबर की एक पिकर के साथ आइटम की एक सूची प्रदर्शित करता है। उपयोगकर्ता संख्या पिकर का उपयोग कर मात्रा बढ़ा या घटा सकता है। जैसे ही वे ऐसा करते हैं, मैं मूल्य दिखाने वाले टेक्स्ट व्यू को अपडेट करना चाहता हूं।एक पिकर विजेट

मुझे इसे प्राप्त करने का प्रयास करते समय कठिनाई में भाग गया। मैंने एक साधारण प्रोजेक्ट बनाया और उपयोगकर्ता ने विजेट पर क्लिक करते समय टोस्ट संदेश को आजमाने और प्रदर्शित करने का प्रयास किया लेकिन इसका कोई फायदा नहीं हुआ।

मेरा अनुमान है कि एक क्लिक श्रोता काम नहीं करता है, तो संख्या विजेट को बटन की तरह नहीं माना जाता है? श्रोता जोड़ने के संबंध में मैं किसी भी सलाह की सराहना करता हूं।

नीचे मेरी कोड है:

NumberPicker np; 

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

    np = (NumberPicker)findViewById(R.id.numberPicker1); 
    np.setMaxValue(99); 
    np.setMinValue(0); 
    np.setValue(50); 

    np.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      Toast.makeText(v.getContext(), "Number selected", Toast.LENGTH_SHORT).show(); 
     } 
    }); 
} 
+2

आप क्या करने की आवश्यकता हो सकती है 'np.setClickable (सही)' अगर सभी आप चाहते हैं घटनाओं क्लिक कर रहे हैं। हालांकि, अगर आप किसी संख्या में परिवर्तन सुनना चाहते हैं, तो क्यों न करें [OnValueChangeListener] (http://developer.android.com/reference/android/widget/NumberPicker.OnValueChangeListener.html)? –

उत्तर

14

करने के लिए देख आवश्यकता होगी Picker के साथ श्रोता सेट करें, आपकी गतिविधि को पिकर इंटरफ़ेस श्रोता को लागू करना होगा। (वास्तव में, अपनी गतिविधि नहीं अनिवार्य इंटरफ़ेस को लागू करने, है तो आप भी गुमनाम भीतरी विधि का उपयोग कर सकते हैं जो कुछ भी काम करता है।।)

अपनी गतिविधि में

तो:

public class MainActivity extends Activity implements NumberPicker.OnValueChangeListener { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     NumberPicker np = (NumberPicker)findViewById(R.id.numberPicker1); 
     np.setMaxValue(99); 
     np.setMinValue(0); 
     np.setValue(50); 
     np.setOnValueChangedListener(this); 

    } 

    public void onValueChange(NumberPicker picker, int oldVal, int newVal) { 
     Toast.makeText(this, "change", Toast.LENGTH_SHORT).show(); 
    } 
} 
+0

स्पॉट पर! बहुत स्पष्ट और अच्छी तरह से समझाया गया उत्तर, धन्यवाद! – Javacadabra

+0

आपका स्वागत है :) – Zyoo

+0

क्या यह एक टुकड़े के साथ काम नहीं करता है? – timberlake

2

आप NumberPicker

के वर्तमान मूल्य के परिवर्तन पर अधिसूचित करने के लिए NumberPicker.setOnValueChangedListener स्थापित करने के लिए इस example कैसे हम NumberPicker

के लिए setOnValueChangedListener सेट
+0

लिंक काम नहीं करता – timberlake

9

नए Android डेवलपर के लिए (मेरे जैसे) , श्रोता को लागू करने के लिए गतिविधि नहीं है। इसे सिर्फ setOnValueChangedListener() में पारित करने की आवश्यकता है।

इससे implements और @Overrides पर बहुत अधिक ओवरलैपिंग से बचने में मदद मिलती है।

उदाहरण:

// Number Picker 
NumberPicker np = (NumberPicker) getView().findViewById(R.id.numberPicker1); 
np.setMinValue(0); 
np.setMaxValue(35); 

np.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() { 
    @Override 
    public void onValueChange(NumberPicker numberPicker, int i, int i2) { 

     Toast.makeText(this, "Value was: " + Integer.toString(i) + " is now: " + Integer.toString(i2), Toast.LENGTH_SHORT).show(); 

    } 
}); 
+0

का उपयोग करें यह काम कर रहा है ... धन्यवाद;) – deanpodgornik

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