2012-12-17 19 views
5

काम नहीं करेगा, हर सवाल के माध्यम से, यह काम नहीं कर सकता है।काम नहीं करेगा,

मैं एक स्ट्रिंग के मान के साथ एक ऐपविड्ज लेआउट सेट करना चाहता हूं (इसलिए लेआउट को केवल स्ट्रिंग को बदलकर दूसरे को स्विच किया जा सकता है)।

String NoteString = "R.layout.widget_blue".toString(); 

int resID = context.getResources().getIdentifier(NoteString, "layout", context.getPackageName()); 

RemoteViews views = new RemoteViews(context.getPackageName(), resID); 

पता नहीं है क्यों यह काम नहीं करता, विजेट सिर्फ कहते हैं: "समस्या विजेट लोड" ..

यह ठीक काम करता है:

RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_blue); 

धन्यवाद

+1

क्या आप नोटस्ट्रिंग को केवल "widget_blue" '(इसलिए कोई '" R.layout। "') बनाने का प्रयास कर सकते हैं? –

उत्तर

14

में स्ट्रिंग घटकों से संसाधन आईडी बनाने के लिए, आपको अलग-अलग घटकों को getIdentifier() में पास करना होगा, पूर्ण पैरामीटर के रूप में पूरी तरह से योग्य आईडी नहीं:

//Get the ID for R.layout.widget_blue 
int resID = context.getResources().getIdentifier("widget_blue", "layout", context.getPackageName()); 

फिर एक अलग लेआउट संसाधन प्राप्त करने के लिए पहले पैरामीटर नाम को बदलें।

+0

धन्यवाद आदमी !! इसने काम कर दिया – Jakob

1

आप इसके लिए getIdentifier का उपयोग क्यों कर रहे हैं? चूंकि आप वैसे भी हार्ड-कोडेड स्ट्रिंग को शामिल कर रहे हैं, फिर भी संसाधन पहचानकर्ता का उपयोग क्यों न करें, जैसा कि आपने दूसरे उदाहरण में किया है। GetIdentifier() विधि पर प्रलेखन में बताया गया है कि यह अधिक कुशल है:

नोट: इस फ़ंक्शन का उपयोग निराश हो गया है। नाम से पहचानकर्ता द्वारा संसाधनों को पुनर्प्राप्त करना अधिक कुशल है।

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