2011-09-23 12 views
7

मैं इस प्रश्न को इस उम्मीद में पोस्ट कर रहा हूं कि मुझे किसी प्रकार का निश्चित उत्तर मिल सके।एंड्रॉइड: किसी गतिविधि या संदर्भ रीफ्रेंस के बिना संसाधनों तक पहुंच

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

प्लस उन सभी संभावित फांसी संदर्भ।

यह भी उदाहरण प्राप्त करते समय पैरामीटर की आपूर्ति करने के लिए सिंगलटन जैसे विभिन्न डिज़ाइन पैटर्न को पूरी तरह बर्बाद कर देता है।

एक स्थिर संदर्भ

लाना तो वहाँ एक तरीका है या पूरे समुदाय सिर्फ इस समस्या के साथ रहती है।

उत्तर

0

अपने Application कक्षा को सिंगलटन बनाएं और इसका उपयोग करें। यह Context है। सभी संसाधन आपके ऐप से बंधे हैं, इसलिए आपको Context संदर्भ की आवश्यकता है। यदि आप उन्हें गतिशील रूप से लोड नहीं करना चाहते हैं तो आप सिंगलटन क्लास में तारों को प्री-लोड कर सकते हैं।

9

आपके संसाधन किसी संदर्भ में बंडल किए गए हैं, यह एक तथ्य है और आप इसे बदल नहीं सकते हैं।

यहाँ आप क्या कर सकते हैं:

बढ़ाएँ Application, आवेदन संदर्भ मिलता है और का उपयोग करें कि एक स्थिर सहायक के रूप में।

public class App extends Application { 

    private static Context mContext; 

    public static Resources getResources() { 
     return mContext.getResources(); 
    } 

    public void onCreate() { 
     super.onCreate(); 
     mContext = getApplicationContext(); 
    } 
} 

आपका प्रकट:

<application 
    android:icon="@drawable/icon" 
    android:label="@string/app_name" 
    android:name="your.package.path.to.App"> 
+0

एक वैकल्पिक दृष्टिकोण गतिविधियों संसाधनों के लोड और फिर बजाय एक संदर्भ वस्तु गुजर के अन्य वस्तुओं के लिए पैरामीटर के रूप में पारित करने के लिए किया जाएगा। लेकिन यह पैटर्न मैं उपयोग करता हूं। :) –

+1

ऐसा लगता है कि हम 'getResources' विधि को कॉल नहीं कर सकते हैं क्योंकि 'ContextWrapper' से विरासत में प्राप्त 'getResources' नामक एक गैर स्थैतिक सदस्य विधि मौजूद है, [यहां देखें] (https://github.com/android/ platform_frameworks_base/blob/master/core/java/android/content/ContextWrapper.java # L83) – sled

+0

'getResouces()' 'getResourcesSafe()' या कुछ नाम बदलें – ChrisMcJava

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