2011-10-01 11 views
34

बस एक त्वरित सवाल, एंड्रॉइड ऐप विकसित करते समय ids.xml का उपयोग क्या होता है?ids.xml के लिए क्या उपयोग किया जाता है?

<resources> 
    <item name="snack" type="id"/> 
</resources> 

क्या इस के लिए इस्तेमाल किया जाएगा: मैं एंड्रॉयड संसाधनों वेबपेज जो निहित पर एक उदाहरण देखा था?

उत्तर

17

id.xml आम तौर पर पहचान-पत्र है कि आप लेआउट में विचारों के लिए उपयोग घोषित करने के लिए प्रयोग किया जाता है।

आप अपने दिए गए एक्सएमएल के लिए की तरह

<TextView android:id="@id/snack"> 

कुछ इस्तेमाल कर सकते हैं।

+11

"ids.xml" के रूप में बस कर रही करने के लिए विरोध ... एंड्रॉयड में यह परिभाषित करने में कोई लाभ: आईडी = "@ + id/नाश्ता"? – pyko

+5

तो, क्या मुझे एंड्रॉइड का उपयोग करना चाहिए: id = "@ + id/newID" या ids.xml फ़ाइल पर newID घोषित करें? सबसे अच्छा समाधान क्या है? –

+3

आप टैग के लिए इसका इस्तेमाल कर सकते भी 'view.setTag (आईडी, मूल्य)' आपके विचार से कि टैग को पढ़ने के लिए बाद में ... – SparK

22

ids.xml का निम्न लाभ है: सभी आईडी घोषित किए गए थे, इसलिए संकलक उन्हें पहचान सकते हैं। तो कुछ इस तरह:

<TextView 
    android:id="@+id/text1" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignBelow="@id/text2" 
    android:text="...."/> 
<TextView 
    android:id="@+id/text2" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="...."/> 

त्रुटि संकलन में परिणाम कर सकते हैं क्योंकि टेक्स्ट 2 से पहले संदर्भित किया गया था

+0

आप सही हैं, मुझे यह सही समस्या है। मुझे पता है कि यह पुरानी पोस्ट है।मेरी स्थिति में, मुझे एक्सएमएल फाइल के शीर्ष में सेव बटन रखना होगा, लेकिन यह स्क्रीन में बटन में दिखाई देगा, मैं चाहता हूं कि अन्य व्यू बटन सेव करें। मैंने सहेजने के लिए बटन को बताने की कोशिश की, लेकिन यह मेरे लिए काम नहीं करता था। – malhobayyeb

+1

हालांकि सच है, यह वास्तव में ज्यादा सहायता नहीं करता है। इस उदाहरण में - आप 'android: layout_alignBelow =" @ + id/text2 "' और दूसरे 'टेक्स्ट व्यू', 'android: id =" @ id/text2 "' डाल सकते थे। – ataulm

+1

यह एक वैध कामकाज है, लेकिन किसी आईडी को निर्दिष्ट किए गए किसी अन्य दृश्य के अलावा किसी अन्य दृश्य को घोषित करना सबसे अच्छा स्टाइलिस्ट विकल्प नहीं हो सकता है। भाषा के लिए अपने इरादे को सही ढंग से दर्पण करने के लिए, आईडी को उस दृश्य के भीतर घोषित किया जाना चाहिए जो इसका उपयोग करता है। –

8

घोषित id.xml के लिए एक और आवेदन लेआउट और पुस्तकालय परियोजनाओं के संबंध में है। के आप एक पुस्तकालय में विकल्पों में से एक सामान्य सूची निर्दिष्ट मान लीजिए (संवाद) लेआउट

<CheckedTextView android:id="@+id/checked_option_one"... 
<CheckedTextView android:id="@+id/checked_option_two"... 
... 

और एक सामान्य (संवाद) टुकड़ा

optionOneCheck = (CheckedTextView)rootView.findViewById(R.id.checked_option_one); 
optionTwoCheck = (CheckedTextView)rootView.findViewById(R.id.checked_option_two); 

में इन विचारों को संभालने आप दृश्य घोषणाओं में से किसी को निकाल देते हैं मुख्य परियोजना में लेआउट की एक प्रति से, आपको रनटाइम पर "ऐसा कोई फ़ील्ड" त्रुटि अपवाद नहीं मिलेगा।

कंपाइलर शिकायत नहीं करता है, लेकिन रनटाइम पर आईडी वास्तव में वहां/ज्ञात नहीं है।

id.xml में आईडी की घोषणा और

<CheckedTextView android:id="@id/checked_option_one"... 
... 

का उपयोग कर रनटाइम त्रुटि से बचा जाता है

+1

"कंपाइलर शिकायत नहीं करता है" - क्या आप निश्चित हैं? कम से कम, लिंट शिकायत करता है कि एक आईडी का उपयोग किया जाता है जो परियोजना में मौजूद नहीं है। भले ही, उस रनटाइम त्रुटि से बचें (जिस तरीके से आपने वर्णन किया है) से लक्षण मास्किंग होगा, लेकिन समस्या नहीं; आप एक आईडी के आधार पर एक दृश्य प्राप्त करने का प्रयास कर रहे हैं जो किसी व्यू से जुड़ा नहीं है। – ataulm

+0

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

+0

एएच ठीक है, आपको मिला, अपडेट के लिए धन्यवाद। – ataulm

7

जब विचारों को गतिशील बनाने, आईडी के predefining ids.xml में posibility एक नव निर्मित दृश्य संदर्भ के लिए देता है । setId(id) विधि का उपयोग करने के बाद आप दृश्य को एक्सेस कर सकते हैं जैसे कि इसे एक्सएमएल में परिभाषित किया गया हो। यह blog post एक अच्छा उदाहरण है।

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