2011-08-03 12 views
18

मैंने एक कस्टम व्यू बनाया है (चलो इसे MyView पर कॉल करें) जो मूल रूप से कैनवास का उपयोग करके स्वयं कुछ टेक्स्ट खींचता है। खींचा जाने वाला पाठ वैश्विक चर का उपयोग करके सेट किया गया है।खुद को फिर से निकालने के लिए एक दृश्य को मजबूर करें

प्रोग्राम के निष्पादन के दौरान किसी बिंदु पर, मैं वैश्विक चर बदलना चाहता हूं, और MyView टेक्स्ट को अपडेट करने के लिए खुद को फिर से तैयार करना चाहता हूं। मैंने findViewById() और फिर invalidate() की कोशिश की, लेकिन यह कुछ भी नहीं करता है। मुझे संदेह है कि MyView के भीतर कुछ भी नहीं बदला है, ऐसा लगता है कि onDraw() पर कॉल करने का कोई कारण नहीं है। क्या किसी दृश्य को खुद को फिर से चलाने के लिए मजबूर करने का कोई तरीका है, भले ही ऐसा लगता है कि इसकी आवश्यकता नहीं है?

उत्तर

30

अगर मैं MyView कि पाठ संग्रहीत करता है अंदर एक सदस्य चर है, और इसके लिए एक सार्वजनिक सेटर बनाने के लिए, तो सिर्फ इतना है कि विधि बुला MyView ही

पुनः बनाने का अंदर एक चर की स्थापना का कारण बनता है View व्यू पर ड्रॉ नहीं करेगा। असल में, व्यू सिस्टम न तो आंतरिक चर के बारे में जानता है और न ही देखभाल करता है।

किसी दृश्य पर invalidate() को आमंत्रित करने से यह दृश्य के माध्यम से स्वयं को आकर्षित कर सकता है। आपको यह देखना चाहिए: http://developer.android.com/guide/topics/ui/custom-components.html

TextViewsetText() का आह्वान करते समय आंतरिक रूप से खुद को अमान्य कर देता है और setText() कॉल के माध्यम से नए टेक्स्ट सेट के साथ खुद को फिर से चलाता है। आपको कुछ ऐसा ही करना चाहिए।

+1

क्षमा करें, आप सही हैं, मैंने वास्तव में 'अवैध()' को कॉल किया था। मेरा कहना था कि 'अवैध() 'को कॉल नहीं किया गया क्योंकि मैं जिस चर को बदल रहा था वह' व्यू '(यह वैश्विक था) के बाहर था। तो मैंने एक आंतरिक चर बनाया और अमान्य होने से पहले बदल दिया। –

0

ठीक है तो मैंने इसे समझ लिया। यदि मेरे पास MyView के अंदर कोई सदस्य चर है जो पाठ को संग्रहीत करता है, और उसके लिए एक सार्वजनिक सेटर बनाता है, तो बस उस विधि को कॉल करने से MyView स्वयं को फिर से निकालने का कारण बनता है। सरल!

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

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