क्या मैं एंड्रॉइड में अलग-अलग लेआउट में एक ही आईडी का उपयोग कर सकता हूं?


90

मैं Android विकास के लिए नया हूं। क्या छवियों और TextViewsविभिन्न LayoutXML फ़ाइलों में एक ही आईडी का उपयोग करना ठीक है ?

जब ग्रहण मेरे लिए ऑटो-सूची करता है, तो यह परियोजना से सभी लेआउट चर को सूचीबद्ध करता है, तो क्या यह टकराएगा? अब तक मैंने अलग-अलग लेआउट में एक ही आईडी का उपयोग करने में कोई समस्या नहीं देखी है, लेकिन मैं लंबे समय से चिंतित हूं।



@ आप अभी भी बाधाओं को समायोजित करने के लिए आईडी की आवश्यकता होगी।
सददा हुसैन

जवाबों:


96

यह अनुशंसा की जाती है कि आप विभिन्न लेआउट के लिए अलग-अलग आईडी का उपयोग करें। लंबे समय तक, जब आपके पास बहुत सारे लेआउट होंगे और बहुत सारे आईडी होंगे तो उन्हें अंतर करना बहुत जटिल हो जाएगा।

मैं आमतौर पर इस तरह से अपनी आईडी का नाम देता हूं layoutName_elementId:।

यह मेरे लिए आसानी से खोजे जाने वाली आईडी को खोजने के लिए काम करता है, खासकर जब स्व-पूर्ण का उपयोग करते समय (मुझे पता है कि मैं किस लेआउट पर काम कर रहा हूं, लेकिन मुझे वास्तव में आईडी का पता नहीं है; इस मामले में, मेरी नामकरण रणनीति के साथ, मैं केवल लेआउट नाम टाइप करें और यह उस लेआउट के सभी आईडी पर लाता है)।

लेआउट और आईडी के बारे में अधिक जानकारी यहां पाई जा सकती है

हैप्पी कोडिंग,


2
आप की ok_buttonहर गतिविधि में हम क्या कहते हैं ? यदि आप जिस चैट को जानते हैं, उसके लिए स्वतः पूर्णता उस तरह भी स्पष्ट है।
दान चाल्टियल

132

संक्षिप्त उत्तर: हां, आप कर सकते हैं।

लंबे उत्तर: आप ऐसा कर सकते हैं क्योंकि जब भी आप अपने लेआउट के एक हिस्से का संदर्भ पाने के लिए findViewById () का उपयोग करते हैं, तो विधि केवल उस दृश्य के लिए वर्तमान में फुलाए गए लेआउट में दिखती है। इसलिए यदि आपके पास किसी अन्य लेआउट में समान आईडी के साथ एक और दृश्य है, तो भी एंड्रॉइड वहां इसके लिए नहीं दिखेगा।


15
क्या आप और भी लंबा जवाब दे सकते हैं? क्योंकि R.id.layout_id एक स्थिर पूर्णांक है, और संकलन समय पर पूर्व-निर्धारित है इसलिए findViewById () को वर्तमान में फुलाया लेआउट नहीं पता होगा।
क्लो

22
किसी और के लिए जो इस प्रश्न के पार है, मैं क्लो के अनुरोध का जवाब देना चाहता था। आईडी प्रत्येक दृश्य के लिए समान होगी, लेकिन कभी भी एक ही गतिविधि में दो बार दिखाई नहीं देगी। एक रूपक के रूप में, विचार करें कि क्या होगा यदि मैंने आपको कागजात का एक ढेर दिया, सभी उन पर संख्याओं का एक गुच्छा। कागज की इन शीटों में से कई पर नंबर 4 लिखा है। आप चादरों में से एक को देख रहे हैं, और मैं आपको 4 को सर्कल करने के लिए कहता हूं। यह आसान है। अब आप उस पर 4 के साथ एक और शीट देखें। आप पा सकते हैं और सर्कल भी कर सकते हैं। इससे कोई फर्क नहीं पड़ता कि संख्या पहले से परिभाषित है।
टेड कैनलॉन्गो

6
मैं टेड की टिप्पणी से सहमत नहीं हूं, आप एक ही आईडी पर एक ही गतिविधि पर चलने वाले दो घटकों के साथ हो सकते हैं। मुझे बस एक ऐप पर समस्या थी, मैं मुख्य गतिविधि में एक ही समय में दो अलग-अलग व्यूपेज का उपयोग कर रहा था। जब मैंने वर्तमान में आईडी के साथ प्रदर्शित ViewPager को पुनः प्राप्त करने का प्रयास किया, तो यह वास्तव में पृष्ठभूमि में चल रहे दूसरे को पुनः प्राप्त कर लिया। मैंने केवल दो आईडी को अद्वितीय बनाकर समस्या को ठीक किया।
योआन हरकौट

8
@YoannHercouet मेरा मानना ​​है कि ऐसा इसलिए है क्योंकि दोनों एक ही पत्रक (गतिविधि) पर थे
Naheel

22

डेवलपर API गाइड के अनुसार:

पूरे पेड़ में एक आईडी की आवश्यकता नहीं होती है, लेकिन यह आपके द्वारा खोजे जा रहे पेड़ के हिस्से के भीतर अद्वितीय होना चाहिए (जो अक्सर पूरे पेड़ हो सकता है, इसलिए जब संभव हो तो पूरी तरह से अद्वितीय होना सबसे अच्छा है)।

तो संक्षिप्त उत्तर यह है कि यह अनिवार्य नहीं है लेकिन संभावित संघर्षों से बचने के लिए यह एक अच्छा अभ्यास है।


1
मैंने एक बार दुर्घटना से एक ही आईडी बनाई थी। बाद में उन्हें नया नाम देना बहुत काम का था क्योंकि सभी उदाहरणों को फिर से जोड़ दिया गया था। इसका मतलब है कि एक बार आपके पास एक आईडी संघर्ष होने के बाद, आप खराब हो गए हैं। सब कुछ फिर से अलग करना बहुत मुश्किल होगा।
t3chb0t

@ t3chb0t असली के लिए! यहां तक ​​कि अगर आप "स्थानीय केवल" की जांच करते हैं, तो एंड्रॉइड स्टूडियो सभी उदाहरणों का नाम बदल देता है। यह बिल्कुल हास्यास्पद है।
जॉन ग्लेन

15

अनुशंसित नहीं है, क्योंकि यदि भविष्य में आपको रिफ्लेक्टर की आवश्यकता होगी view id, तो एंड्रॉइड स्टूडियो इसे सभी XMLफाइलों और कक्षाओं में रिफ्लेक्टर करेगा और आप परेशानी में पड़ जाएंगे।

लेकिन कुछ ऐसे मामले भी होते हैं जब आपको idउदाहरण के लिए उसी का उपयोग करने की आवश्यकता होती है यदि आपके पास कुछ सार है और आप कई लेआउट का पुन: उपयोग करते हैं।

यदि आपके पास अपने प्रोजेक्ट में viewsएक से अधिक हैं id'sऔर आपको रिफ्लेक्टर की आवश्यकता है, तो इसे मैन्युअल रूप से करें, IDE फ़ंक्शन में बिल्ड का उपयोग न करें, लेआउट के idअंदर लक्ष्य दृश्य में परिवर्तन करें और XMLफिर लेआउट के अंदर लाल त्रुटि को ठीक करें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.