2010-10-07 13 views
6

मैं इस मैं किसी अन्य वर्ग से एक विधि कॉल करने की कोशिश के बाहर एक वर्गएंड्रॉयड - getResources() और स्थिर

public class Preferences extends PreferenceActivity implements OnSharedPreferenceChangeListener 

मिल गया है। इस विधि में शामिल हैं:

mFoo.setTextColor(getResources().getColor(R.color.orange)) 

लेकिन यह काम नहीं करता है। यह मुझे बताता है getResources स्थिर नहीं है ... मैं इसे कैसे बदल सकता हूं?

उत्तर

13

लेकिन यह काम नहीं करता है, यह मुझे बताता है, प्राप्त करें स्रोत स्थिर नहीं है ... मैं कैसे बदल सकता हूं?

इसका मतलब है कि आप नियमित (उदाहरण) विधि के बजाय एक स्थिर विधि से getResources() पर कॉल करने का प्रयास कर रहे हैं। सबसे आसान काम अपने मामले में क्या करना है, अगर mFoo एक TextView या कुछ अन्य विजेट है, Context विजेट से उपलब्ध पर getResources() कॉल करने के लिए है:

mFoo.setTextColor(mFoo.getContext().getResources().getColor(R.color.orange)); 
हालांकि

, तथ्य यह है कि आप एक विजेट संदर्भ के लिए कोशिश कर रहे हैं एक स्थिर विधि से mFoo नामित मेरे बाहर बकवास डराता है। यह सिर्फ एक स्मृति रिसाव के लिए पूछ रहा है। मुझे लगता है कि आपको वास्तव में स्थिर डेटा सदस्यों और विधियों के उपयोग पर पुनर्विचार करने की आवश्यकता है।

+0

धन्यवाद। मेरी मूल समस्या यह थी कि मैं कक्षा प्राथमिकताओं से myClass से संबंधित एक विधि को कॉल करना चाहता हूं। तो जब कोई वरीयता बदल गई है, तो उसे "विदेशी" वर्ग से एक विधि को कॉल करना होगा, शायद आप मुझे संकेत दे सकें, इसे कैसे हल करें ?! – Christoph

+0

@ क्रिस्टोफ: आप अपनी 'प्राथमिकता' से कुछ अन्य गतिविधियों के विजेट अपडेट करने की कोशिश नहीं करना चाहते हैं। 'RegisterOnSharedPreferenceChangeListener()' का उपयोग करके वरीयता परिवर्तनों के लिए अपनी अन्य गतिविधि रजिस्टर करें। जब वरीयता बदलती है, गतिविधि अधिसूचित होती है और समायोजन कर सकती है। – CommonsWare

+0

ठीक है, मैंने जो किया है, उससे पहले, मैं, मेरी "अन्य गतिविधि" में कोड को कम करने का एक तरीका है, चेंजलिस्टर को आउटसोर्स कर रहा हूं .. – Christoph

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