2010-10-04 16 views
7

मैं एक गैलरी दृश्य जहां दृश्य प्रत्येक आइटम के लिए इसी गैर तुच्छ है और पाठ के साथ-साथ कई बटन के होते हैं का उपयोग कर रहा हूँ।गैलरी/AdapterView बाल Drawable राज्य

जब मैं गैलरी दृश्य खींचें करने के लिए क्लिक करें (कहीं नहीं पर बटनों में से एक) के लिए बटन के drawable स्थिति परिवर्तन दबाया जाता है और के रूप में अगर बटन के सभी वर्तमान में दबाया जा रहा है प्रकट होता है। इसके अतिरिक्त, चयनित व्यवहार के लिए वही व्यवहार होता है (उदाहरण के लिए बच्चे टेक्स्टव्यू के सभी पाठ रंग बदलते हैं)।

मैं इस व्यवहार को रोकने की कोशिश कर रहा हूं और एंड्रॉइड पाया है: डुप्लिकेट पेरेंटस्टेट xml विशेषता के साथ-साथ setDuplicateParentStateEnabled प्रॉपर्टी। ऐसा लगता है कि यह पूरा करना चाहिए जो मैं करने की कोशिश कर रहा हूं, लेकिन ऐसा कोई प्रभाव नहीं पड़ता है।

कोई विचार?

उत्तर

3

सुनिश्चित नहीं हैं कि जहां duplicateParentState संपत्ति खेलने में आता है, लेकिन स्रोत के माध्यम से तोड़ने से पता चलता है कि यह ध्यान में चयनित और दबाया राज्यों के लिए कभी नहीं लिया जाता है। मैं एक कस्टम व्यू क्लास बनाना चाहता हूं और प्रेषण को ओवरराइड करना चाहता हूं सेट किया गया और प्रेषित किया गया तरीका।

8

हो सकता है कि देर से पक्ष पर एक सा है, लेकिन इस समस्या में अपने आप को हाल ही में खत्म हो जाने पर मैं इसका कोई सुधार।

प्रेषण सेट किया गया और प्रेषण सेट किया गया वास्तव में यहां मदद नहीं करता है, क्योंकि आपको वास्तव में ओवरराइड करने की आवश्यकताएं गैलरी के भीतर निजी हैं।

समाधान बच्चे के दृश्य के आस-पास एक अतिरिक्त लेआउट (मैंने लीनियरलाइट के उप-वर्ग का उपयोग किया) जोड़ने के लिए है, जो setPressed (बूलियन) को ओवरराइड करता है और इसे आसानी से अनदेखा करता है। यह गैलरी को बच्चों पर अपने दबाए गए राज्य को मजबूर करने से रोकता है, जबकि अभी भी उन बच्चों को सीधे सक्रिय करने की इजाजत देता है, और घटनाओं को ऊपर से प्रचारित होने से रोक नहीं देता है।

+0

यह काम करता है। बहुत बहुत धन्यवाद! – yuku

+0

अद्भुत फिक्स! क्या किसी को पता है कि यह एंड्रॉइड के लिए एक बग रिपोर्ट है? ऐसा लगता है कि वास्तव में व्यवहार की उम्मीद नहीं है। – MikeIsrael

1

आप इसके बारे में अपने स्वयं के कस्टम संस्करण बनाने के लिए गैलरी से विस्तार करने के लिए होता है, तो आप बस कर सकते हैं:

@Override 
    public boolean onDown(MotionEvent e) { 
    // Ignore onDown events in order to avoid having every child's state set to 'pressed' 
    return true; 
    } 

यह अभी भी कस्टम गैलरी के बच्चों को ठीक से क्लिक घटनाओं, और स्वाइप प्राप्त कर सकेगा/टूट पड़नेवाला इरादे के रूप में काम करता है।

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