2011-01-18 14 views
24

एक Android परियोजना के जावा कोड के रूप में आईडी कलाकारों के साथ एक दृश्य हो रही है, तो आप आप की तरह कुछ कर सकते हैं एक दृश्य के संसाधन के लिए संदर्भ हैं: R.id ऊपर मेंAndroid और एक स्ट्रिंग

View addButton = findViewById(R.id.button_0); 

.button_0 एक स्ट्रिंग नहीं है। क्या एक स्ट्रिंग द्वारा संसाधन को गतिशील रूप से संदर्भित करना संभव है, जैसे कि "R.id.button_0"?

मैं "R.id.button_%i" द्वारा एक बटन को संदर्भित करना चाहता हूं जहां %i कुछ मान्य अनुक्रमणिका द्वारा प्रतिस्थापित किया गया है।

उत्तर

52
int resID = getResources().getIdentifier("button_%i", 
    "id", getPackageName()); 
View addButton = findViewById(resID); 

जहां %i कुछ मान्य अनुक्रमणिका द्वारा प्रतिस्थापित किया गया है।

getResources() विधि Context कक्षा से संबंधित है, तो आप इसे सीधे Activity से उपयोग कर सकते हैं। यदि आप किसी गतिविधि के अंदर नहीं हैं, तो पहुंच के लिए संदर्भ का उपयोग करें: (myCtxt.getResources())।

+0

@ क्रिस्टियन: धन्यवाद। उत्तम। – SK9

+3

ध्यान दें कि यह आईडी का उपयोग करने से काफी धीमी गति से चल रहा है। – hackbod

+0

धन्यवाद, बस मैं जो देख रहा था। बीटीडब्ल्यू, मैंने इस कोड नमूने में संकलन त्रुटि तय की है। –

4

आप किसी भी सरणी में इच्छित सभी आईडी डालने का प्रयास कर सकते हैं और उसके बाद उस सरणी का उपयोग करके अपने संसाधनों को गतिशील रूप से संदर्भित कर सकते हैं।

+0

यह कुछ विशेष अवसरों के लिए एक अच्छा दृष्टिकोण हो सकता है (जब संसाधनों का नाम बदलता है या आदेश जटिल होता है); अन्यथा मुझे लगता है कि यह करने का बेहतर तरीका नहीं है। कुछ बार आप एक विशाल सरणी के साथ समाप्त हो जाएंगे जो आपके कोड को सुगंधित बनाता है। – Cristian

+0

@ क्रिस्टियन यह वास्तव में भयानक बुरा कोड बना देता है। जहां मैंने अतीत में ऐसा किया है, मैंने इसे अपनी स्थिर कक्षा में बदल दिया है। लेकिन आपका दृष्टिकोण कुछ हद तक अच्छा लगता है;) – jsonfry

+1

imho दोनों तरीके गंध। :) – Qberticus

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