Android id
अवलोकन
एंड्रॉइड id
एक पूर्णांक है जो आमतौर पर विचारों की पहचान करने के लिए उपयोग किया जाता है; इसे id
XML (जब संभव हो) और कोड के माध्यम से (प्रोग्रामेटिक रूप से) असाइन किया जा सकता है। (जैसे कि उपयोग करके उत्पन्न id
XML- परिभाषित View
s के लिए संदर्भ प्राप्त करने के लिए सबसे उपयोगी है )Inflater
setContentView
।)
के 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
-अनुदिष्ट id
s अद्वितीय होगा।
- कोड-असाइन किए गए
id
एस को अद्वितीय नहीं होना चाहिए
- कोड-असाइन किए गए
id
(सैद्धांतिक रूप से) XML
-Signign id
s के साथ संघर्ष कर सकते हैं ।
id
अगर सही ढंग से (पढ़ने के लिए) छोड़ दिया जाए तो ये परस्पर विरोधी बात नहीं करेंगे ।
कब और क्यों) परस्पर विरोधी id
कोई फर्क नहीं पड़ता
findViewById(int)
आपके द्वारा निर्दिष्ट दृश्य से दृश्य पदानुक्रम के माध्यम से पुनरावृत्ति गहराई-प्रथम पुनरावृति करेगा और पहले View
मिलान के साथ इसे पाता है id
।
- जब तक पदानुक्रम में
id
एक्सएमएल-परिभाषित से पहले कोई कोड-असाइन नहीं सौंपा id
गया है, findViewById(R.id.somename)
तब तक एक्सएमएल-परिभाषित व्यू को हमेशा वापस करेगा id
।
गतिशील रूप से दृश्य और नियत बनाना ID
रों
यदि आप अपने विचारों के संदर्भों को आसपास रखना चाहते हैं , तो उन्हें getApplicationContext()
तुरंत सुनिश्चित करें और प्रत्येक संदर्भ को शून्य में सेट करना सुनिश्चित करें onDestroy
। जाहिरा तौर पर लीकActivity
(फांसी पर इसे बाद है नष्ट हो जाता है) बेकार है .. :)
एक XML सुरक्षित रखें android:id
कोड में उपयोग के लिए करें
एपीआई 17 पेश किया गया View.generateViewId()
जो एक अद्वितीय आईडी बनाता है। (इसे इंगित करने के लिए टेक-चांस-मेक-चेंज के लिए धन्यवाद।) *
यदि आपका ViewGroup
XML के माध्यम से परिभाषित नहीं किया जा सकता है (या आप इसे नहीं चाहते हैं) तो आप यह सुनिश्चित करने के लिए 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
और हमारे नए TextView
s में से एक दोनों 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);
*इतना बुरा नहीं