2013-02-07 22 views
20

एक्सएमएल को बढ़ाने के बाद एंड्रॉइड R.id.id_name का उपयोग कैसे करता है?एक ही आईडी के साथ दो विचार

1. मान लीजिए मेरे पास एक ही आईडी के साथ एक बटन के साथ दो एक्सएमएल हैं।

2.I उन्हें फुलाया और उन्हें विचारों

3.In R.id वर्ग केवल एक int दोनों बटन के लिए बनाया जाएगा में परिवर्तित कर दिया है।

एंड्रॉइड एक ही आईडी के साथ इन संसाधनों को समान संसाधन नाम (R.id.id_name) का उपयोग करके कैसे अलग करता है।

उत्तर

23

आईडी एक अद्वितीय संदर्भ नहीं है।

हालांकि, व्यावहारिक रूप से, आप मूल दृश्य का उपयोग करके अंतर करते हैं।

यदि हम विचार है कि 'इस' एक गतिविधि एक लेआउट है कि आपके बटन होते हैं, तो साथ सेट अप है,:

Button button = (Button) this.findViewById(R.id.id_name); 

पहले एक यह लेआउट में पाता है वापस आ जाएगी (मुझे लगता है कि - यकीन नहीं वास्तविक व्यवहार परिभाषित किया गया है)।

हालांकि आप जो कुछ कर सकते हैं वह कुछ माता-पिता दृश्य पर findViewById पर कॉल करता है जिसमें उस आईडी के साथ केवल एक ऐसा उदाहरण होता है।

LinearLayout okParent = (LinearLayout) this.findViewById(R.id.okLayout); 
LinearLayout cancelParent = (LinearLayout) this.findViewById(R.id.cancelLayout); 

Button okButton = (Button) okParent.findViewById(R.id.id_name); 
Button cancelButton = (Button) cancelParent.findViewById(R.id.id_name); 

संकल्पनात्मक रूप से, यह पथ आधारित लुकअप का एक प्रकार है। आपको अपने लेआउट डिज़ाइन करने के लिए सावधान रहना चाहिए ताकि यह संभव हो।

6

यह जानता है जो View इसका इस्तेमाल करना चाहिए, क्योंकि यह एक एक्सएमएल फ़ाइल है कि वर्तमान में सामग्री दृश्य के रूप में सेट किया गया है (या फुलाया जाता है) में इस विशिष्ट id साथ View के लिए लग रहा है।

9

एंड्रॉइड आसान सड़क लेता है: आईडी एप्लिकेशन-व्यापी अद्वितीय नहीं हैं, लेकिन लेआउट-व्यापी अद्वितीय हैं।

R.id.foo का मान foo आईडी के साथ नियंत्रण रखने वाले दो अलग-अलग लेआउट में समान है। चूंकि वे विशिष्टता के लिए प्रतिस्पर्धा नहीं कर रहे हैं, इससे कोई फर्क नहीं पड़ता।

+1

slick! एंड्रॉइड द्वारा लिया गया बहुत अच्छा तरीका – Archit

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