मैं जेनरेट आर फ़ाइल में सभी फ़ील्ड के माध्यम से पुन: सक्रिय करने में सक्षम होना चाहता हूं।एंड्रॉइड: संसाधन आईडी के माध्यम से प्रोग्रामेटिक रूप से पुनरावृत्त
कुछ की तरह:
for(int id : R.id.getAllFields()){
//Do something with id, like create a view for each image
}
मैं प्रतिबिंब की कोशिश की है, लेकिन मैं एक विशिष्ट आंतरिक वर्ग कि आर क्लास के भीतर निहित है लोड करने के लिए नहीं कर पा रहे। तो, उदाहरण के लिए, यह मेरे लिए काम करेगा नहीं:
Class c = Class.forName("packageName.R.id")
मैं आर वर्ग पर ही प्रदर्शित कर सकते हैं, लेकिन मैं आईडी वर्ग के भीतर क्षेत्रों की जरूरत है।
मैंने संसाधन वर्ग को देखने का भी प्रयास किया, लेकिन वहां कुछ भी नहीं मिला। उस स्थिति में, ऐसा लगता है कि आप संसाधन आईडी ले सकते हैं और उस आईडी का स्ट्रिंग नाम प्राप्त कर सकते हैं, या स्ट्रिंग नाम ले सकते हैं और संबंधित संसाधन आईडी प्राप्त कर सकते हैं। मुझे कुछ भी नहीं मिला:
int[] Resources.getAllResourceIDs()
शायद मैं इस गलत के बारे में जा रहा हूं। या हो सकता है मैं, उदा, उन सब को हाथ से टाइप करने लड़ने नहीं करना चाहिए, .:
int[] myIds = {R.id.firstResource, R.id.secondResource}
यह दृष्टिकोण जब मेरे यूआई डिजाइनर के साथ काम कर के रूप में लचीला नहीं होने का नकारात्मक पक्ष है। जब भी वह एक्सएमएल फ़ाइल में एक नया संसाधन जोड़ता है, तो मुझे कोड अपडेट करना होगा। स्पष्ट रूप से बहुत दर्दनाक नहीं है, लेकिन यह अभी भी अच्छा होगा और ऐसा लगता है कि यह करने योग्य होना चाहिए।
संपादित करें:
नीचे के बारे में ViewGroup.getChildCount()/ViewGroup.getChildAt() ठीक काम करता है जवाब। लेकिन, मुझे अपने एक्सएमएल व्यू ग्रुप/लेआउट को तुरंत चालू करने का एक तरीका भी ढूंढना पड़ा। आप एक आंतरिक वर्ग पर प्रतिबिंब का उपयोग कर सकते
LayoutInflater li = MyActivity.getLayoutInflater();
ViewGroup vg = (ViewGroup) li.inflate(R.layout.main, null);
मैं यह नहीं कह रहा हूँ इस snarky होने के लिए लेकिन IMHO सच है कि आप आप से पूछना करने के लिए इस सवाल का मतलब है कि आप शायद कर रहे हैं की जरूरत महसूस करते हैं कि कुछ गलत। क्या आप इसे करने के लिए अपने उपयोग के मामले में विस्तार कर सकते हैं। मैं किसी भी कारण से नहीं सोच सकता कि मैं अपने पूरे एप्लिकेशन में परिभाषित सभी आईडी की पहुंच क्यों लेना चाहता हूं। – Qberticus
मैं सभी आईडी का उपयोग नहीं करना चाहता, बल्कि, सभी संसाधन आईडी का एक निश्चित नाम (उदा। R.imageViewIds) के अंतर्गत है। इस तरह, मेरे कोड में, मैं एक ईवेंट श्रोता या लूप के लिए उनमें से प्रत्येक में जो कुछ भी जोड़ सकता हूं।मेरे यूआई में कई इमेज व्यू होंगे जो सभी घटनाओं का जवाब देंगे, और यह अच्छा होगा अगर मैं उन सभी छवि दृश्यों को बिना किसी कोड-कोडिंग के नाम (उदाहरण के लिए IView1.setListener (myListener); IView2.setListener (myListener));) इसके अलावा, अगर मेरा यूआई डिजाइनर एक्सएमएल फ़ाइल में चीजों का नाम बदलने का फैसला करता है तो मुझे अपने कोड को दोबारा नहीं करना पड़ेगा। –