Android idअवलोकन
एंड्रॉइड idएक पूर्णांक है जो आमतौर पर विचारों की पहचान करने के लिए उपयोग किया जाता है; इसे idXML (जब संभव हो) और कोड के माध्यम से (प्रोग्रामेटिक रूप से) असाइन किया जा सकता है। (जैसे कि उपयोग करके उत्पन्न idXML- परिभाषित Views के लिए संदर्भ प्राप्त करने के लिए सबसे उपयोगी है )InflatersetContentView ।)
के idमाध्यम से असाइन करेंXML
android:id="@+id/Somename की एक विशेषता जोड़ें"अपने विचार ।
- जब आपका एप्लिकेशन बनाया जाता है, तो
android:idउसे एक अद्वितीय असाइन किया जाएगा int कोड में उपयोग के लिए ।
- आपके संदर्भ
android:idके intउपयोग करते हुए "कोड में मूल्यR.id. SomeName" (प्रभावी रूप से एक निरंतर।)
- यह
intबिल्ड से बिल्ड में बदल सकता है, इसलिए कभी भीgen/ पैकेज R.java/ नाम / आईडी से कॉपी न करें, बस " R.id.somename" का उपयोग करें ।
- (इसके अलावा, XML में एक
idअसाइन किए गए का Preferenceउपयोग तब नहीं किया जाता है जब इसके Preferenceउत्पन्न होते हैं View।)
idकोड के माध्यम से असाइन करें (प्रोग्रामेटिक रूप से)
- मैन्युअल रूप से सेट
idका उपयोग करनाsomeView.setId(Int);
-
intसकारात्मक होना चाहिए, लेकिन अन्यथा यह जो कुछ भी आप चाहते हैं हो सकता है arbitrary- है (पढ़ने अगर यह भयंकर है रहते हैं।)
- उदाहरण के लिए, यदि आइटमों का प्रतिनिधित्व करने वाले कई दृश्य बनाते और क्रमांकित करते हैं, तो आप उनके आइटम नंबर का उपयोग कर सकते हैं।
की विशिष्टता idरों
XML-अनुदिष्ट ids अद्वितीय होगा।
- कोड-असाइन किए गए
idएस को अद्वितीय नहीं होना चाहिए
- कोड-असाइन किए गए
id(सैद्धांतिक रूप से) XML-Signign ids के साथ संघर्ष कर सकते हैं ।
idअगर सही ढंग से (पढ़ने के लिए) छोड़ दिया जाए तो ये परस्पर विरोधी बात नहीं करेंगे ।
कब और क्यों) परस्पर विरोधी idकोई फर्क नहीं पड़ता
findViewById(int)आपके द्वारा निर्दिष्ट दृश्य से दृश्य पदानुक्रम के माध्यम से पुनरावृत्ति गहराई-प्रथम पुनरावृति करेगा और पहले Viewमिलान के साथ इसे पाता है id।
- जब तक पदानुक्रम में
idएक्सएमएल-परिभाषित से पहले कोई कोड-असाइन नहीं सौंपा idगया है, findViewById(R.id.somename)तब तक एक्सएमएल-परिभाषित व्यू को हमेशा वापस करेगा id।
गतिशील रूप से दृश्य और नियत बनाना IDरों
यदि आप अपने विचारों के संदर्भों को आसपास रखना चाहते हैं , तो उन्हें getApplicationContext()तुरंत सुनिश्चित करें और प्रत्येक संदर्भ को शून्य में सेट करना सुनिश्चित करें onDestroy। जाहिरा तौर पर लीकActivity (फांसी पर इसे बाद है नष्ट हो जाता है) बेकार है .. :)
एक XML सुरक्षित रखें android:idकोड में उपयोग के लिए करें
एपीआई 17 पेश किया गया View.generateViewId() जो एक अद्वितीय आईडी बनाता है। (इसे इंगित करने के लिए टेक-चांस-मेक-चेंज के लिए धन्यवाद।) *
यदि आपका ViewGroupXML के माध्यम से परिभाषित नहीं किया जा सकता है (या आप इसे नहीं चाहते हैं) तो आप यह सुनिश्चित करने के लिए XML के माध्यम से आईडी आरक्षित कर सकते हैं कि यह अद्वितीय बना रहे:
यहाँ, मान / ids.xml एक रिवाज को परिभाषित करता है id:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<item name="reservedNamedId" type="id"/>
</resources>
फिर एक बार ViewGroup या View बन जाने के बाद, आप कस्टम आईडी संलग्न कर सकते हैं
myViewGroup.setId(R.id.reservedNamedId);
परस्पर विरोधी idउदाहरण
उदाहरण के रूप में स्पष्ट रूप से स्पष्टता के लिए, यह जांचने देता है idकि पर्दे के पीछे संघर्ष होने पर क्या होता है ।
लेआउट / mylayout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:id="@+id/placeholder"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
</LinearLayout>
संघर्ष का अनुकरण करने के लिए, हमारे नवीनतम बिल्ड को असाइन किया गया R.id.placeholder( मान @+id/placeholder)int 12 ।।
इसके बाद, MyActivity.java परिभाषित करता है कुछ प्रोग्राम प्रोग्राम (कोड के माध्यम से) कहते हैं:
int placeholderId = R.id.placeholder; // placeholderId==12
// returns *placeholder* which has id==12:
ViewGroup placeholder = (ViewGroup)this.findViewById(placeholderId);
for (int i=0; i<20; i++){
TextView tv = new TextView(this.getApplicationContext());
// One new TextView will also be assigned an id==12:
tv.setId(i);
placeholder.addView(tv);
}
तो placeholderऔर हमारे नए TextViews में से एक दोनों idका 12 है! लेकिन यह वास्तव में एक समस्या नहीं है यदि हम प्लेसहोल्डर के बच्चे के विचारों को क्वेरी करते हैं:
// Will return a generated TextView:
placeholder.findViewById(12);
// Whereas this will return the ViewGroup *placeholder*;
// as long as its R.id remains 12:
Activity.this.findViewById(12);
*इतना बुरा नहीं