2012-09-08 17 views
61

मैं एंड्रॉइड विकास के लिए नया हूं। क्या छवियों और TextViews के लिए अलग-अलग Layout एक्सएमएल फाइलों में एक ही आईडी का उपयोग करना ठीक है?क्या मैं एंड्रॉइड में अलग-अलग लेआउट में एक ही आईडी का उपयोग कर सकता हूं?

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

+0

FYI: [डेटा बाइंडिंग का उपयोग करके] पर विचार करें (https://medium.com/google-developers/no-more-findviewbyid-457457644885) – Pavel

उत्तर

66

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

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

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

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

मुबारक कोडिंग,

+1

पर थे, चलिए आपके हर गतिविधि में 'ok_button' कहने की क्या समस्या है? स्वत: पूर्णता इस तरह से स्पष्ट है कि अगर आप उस चैट को जानते हैं जिसे आप ढूंढ रहे हैं। –

102

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

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

+11

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

+11

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

+3

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

12
डेवलपर एपीआई गाइड के अनुसार

:

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

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

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

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