2013-05-24 3 views
5

मेरे पास एक एंड्रॉइड Dialog है जिसमें 3 numberpickers अंदर है। तीसरे पिकर को बदलना पहले 2 pickers के प्रदर्शित मानों में बदलाव को ट्रिगर करता है। हालांकि मैंने देखा है जब मैं दिखाया गया मान बदलते हैं, औरएंड्रॉइड नंबरपिकर मूल्यों को लपेटता है जब प्रदर्शित मूल्य बदल जाते हैं

setWrapSelectorWheel(false) 

यह अभी भी नए मूल्यों के रूप में नेत्रहीन लिपटे से पता चलता फोन (मैं पहले एक ऊपर अंतिम मान देख सकते हैं)।

अगर मैं पिकर को छूता हूं तो यह अचानक गैर लपेटने वाले चयन चक्र में फंस जाता है। अजीब बात यह है कि मैं

getWrapSelectoWheel() 

प्रदर्शित मूल्यों को सेट करने के बाद कॉल करता है और यह झूठा देता है ... जैसा कि मैंने इसे सेट किया है। लेकिन दृष्टि से यह गलत है।

कोई विचार क्या चल रहा है?

बहुत धन्यवाद!

+0

क्या आपको कभी समाधान मिला? मैं अभी भी एक ही समस्या से निपट रहा हूं, पिकर को प्रोग्रामेटिक रूप से रैप दृश्यों को रीसेट करता है। – Gabriel

उत्तर

3

मुझे नहीं पता कि एंड्रॉइड का कौन सा संस्करण आप चल रहे हैं लेकिन मैं आपको सुझाव दूंगा कि आप source code for the NumberPicker (v4.2.2) पढ़ लेंगे। शायद आपको निजी विधि initializeSelectorWheelIndices पर कॉल ट्रिगर करने की आवश्यकता है जिसे कुछ सार्वजनिक तरीकों से कॉल के माध्यम से किया जा सकता है।

हालांकि मुझे लगता है कि पिकर के उपयोग को लपेटकर, रैपिंग फ्लैग भाग को बदलकर, थोड़ा असामान्य प्रतीत होता है। क्या आप नहीं चाहते कि यह व्यवहार सुसंगत रहे? आपके मामले और अधिकतम मान सेट करने के बाद एक बार इस मामले में setWrapSelectorWheel पर कॉल करें और फिर इसे अकेला छोड़ दें।

11

मुझे एक समाधान मिला, डैनियल सही रास्ते पर था, हालांकि ऐसा लगता है कि initializeSelectorWheelIndices वास्तव में एक बार खराब है जब आप पहले से ही अपने मूल्य निर्धारित कर चुके हैं। इसके कारण, आपको अपने मूल्य निर्धारित करने से पहले setMinValue और setMaxValue पर कॉल करने की आवश्यकता है। हालांकि, अगर आपके पास पहले से ही आपके पिकर पर एक सरणी सेट है, तो यदि आप मौजूदा सरणी की तुलना में उच्च मान के साथ setMaxValue पर कॉल करते हैं, तो यह आपको ArrayIndexOutOfBounds अपवाद देगा।

समाधान तो पुराने प्रदर्शन मूल्यों स्पष्ट करने के लिए है, तो अपने अधिकतम मूल्य, सेट आप setWrapSelectorWheel और setDisplayValues कॉल कर सकते हैं:

public void updatePickerValues(String[] newValues){ 
    picker.setDisplayedValues(null); 
    picker.setMinValue(0); 
    picker.setMaxValue(newValues.length -1); 
    picker.setWrapSelectorWheel(false); 
    picker.setDisplayedValues(newValues); 
} 
+1

अच्छा काम। मेरे लिए काम किया –

1

मैं किटकैट पर साथ ही इस व्यवहार की पुष्टि कर लें। यह एक बग है। एक मौजूदा रिपोर्ट नहीं मिली, इसलिए मैंने यहां एक नया निर्माण किया: bug# 98319

पिछले उत्तरों के अनुसार मैंने पाया कि सेटअप सेटअप करने के बाद अंतिम कॉल कॉल सभी परिदृश्यों के लिए काम करेगा। मेरे मामले में मैं संख्यात्मक रूप से संख्या पिकर की सीमा बदल रहा हूं क्योंकि उपयोगकर्ता इंटरैक्ट कर रहा है और मैं इसे 100% व्यवहार करने के लिए नहीं प्राप्त कर सकता हूं। मैं रैप चयनकर्ता के साथ रहने का विकल्प चुन रहा हूं।

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