2010-12-04 17 views
18

के बीच क्या अंतर है, मुझे आश्चर्य है कि @+id/android:list और @+id/list के बीच क्या अंतर है। मैं आखिरी व्यक्ति जानता हूं जो एक नियमित आईडी असाइनमेंट है लेकिन पहला अलग दिखता है। क्या यह विशेष बनाता है?@ + id/android: list और @ + id/list

मैं इसे कहाँ देखा: मुझे लगता है कि जैसे पर ListView, ListAdapter और चीजों को पढ़ाई कर रहा था और लेखक के रूप में नीचे लेआउट xml फ़ाइल में ListView को परिभाषित:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
<ListView 
    android:id="@+id/android:list" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    /> 
<TextView 
    android:id="@+id/android:empty" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:text="@string/main_no_items"/> 
</LinearLayout> 

और मुझे भी @+id/android:empty आईडी का उल्लेख करते हैं भी।

और वह ListActivity कक्षा भी बढ़ाता है।

यहां source of the article है।

और यह भी क्या मेरे मन में है के रूप में सवाल कर रहे हैं:

  1. हम ListActivity का विस्तार करना चाहिए? शायद मैं एक गतिविधि चाहता हूं जिसमें अन्य दृश्य भी शामिल हों।
  2. हम @+id/android:list का उपयोग करते हैं क्योंकि हम ListActivity बढ़ाते हैं या हम Activity का विस्तार करते हैं तो हम उसी सम्मेलन का उपयोग कर सकते हैं?

धन्यवाद।

उत्तर

39

एंड्रॉइड में संसाधन आईडी एक पैकेज के लिए विशिष्ट हैं (जो अच्छा है, या अन्यथा यदि आपका ऐप एक ही समय में कई पैकेजों से निपट रहा है तो आपके पास बहुत सारे संघर्ष होंगे)।

@+id/list आपके ऐप (= आपके पैकेज) में "सूची" नाम के साथ एक संसाधन आईडी बनाएगा और इसे एक अद्वितीय आईडी देगा। कोड में, यह R.id.list होगा।

@android:id/list पैकेज एंड्रॉयड (जो, कोड में, android.R.id.list होगा से आईडी "सूची" का उपयोग करेगा

संपादित करें:। सुधार डेविड Hedlund ने बताया जोड़ने की जरूरत है:। उचित संदर्भ @android:id/list होगा इसके अलावा , + इंगित करता है कि आप एक नई आईडी को परिभाषित कर रहे हैं - आपको स्पष्ट रूप से इसकी आवश्यकता नहीं है जब आप एंड्रॉइड एपीआई में परिभाषित कुछ का संदर्भ दे रहे हों।

+1

यह क्या हो रहा है इसका सही विवरण है, लेकिन एलिविन पॉइंट के रूप में, वाक्यविन्यास '@android: id/list' है। '+' का मतलब 'R' में कुछ जोड़ना है, जबकि प्लस को छोड़कर बस कुछ परिभाषित करने का तात्पर्य है जो पहले से परिभाषित है। –

+0

क्या यह '@ + id/android: list' या' @ id/android: list' होना चाहिए? – Tarik

+0

धन्यवाद डेविड, मैंने इसे बिना किसी सोच के प्रश्न से कॉपी किया। – EboMike

11

मुझे लगता है कि आपके द्वारा पोस्ट किए गए उदाहरण कोड में एक टाइपो है, इसलिए इसे @android:id/list (+ के बिना)। ListActivity javadoc से:

अपने खुद के दृश्य आईडी के साथ एक ListView वस्तु शामिल होना चाहिए "@Android: आईडी/सूची"

@android:id/list ListActivity के लिए विशिष्ट है, तो आप इसकी आवश्यकता नहीं है अगर आप एक ListView जोड़ रहे हैं किसी अन्य प्रकार की गतिविधि में। यदि आप चाहते हैं कि उपयोगकर्ता सूची देखने से अधिक करे तो आपको ListActivity का विस्तार करना चाहिए। उदाहरण के लिए, आप सूची में किसी आइटम पर क्लिक का जवाब देने के लिए ListActivity.onListItemClick ओवरराइड कर सकते हैं।

इसी तरह, @id/android:empty (फिर से, बिना +), सूची गतिविधि के लिए एक विशेष मामला है। यह आपको एक वैकल्पिक दृश्य निर्दिष्ट करने की अनुमति देता है जिसे आपकी सूची खाली होने पर प्रदर्शित किया जाना चाहिए।जब सूची पॉप्युलेट हो जाती है तो वह दृश्य प्रदर्शित नहीं किया जाएगा।

+0

इसे स्पष्ट रूप से समझाए जाने के लिए धन्यवाद :) – kuchi

0
एंड्रॉयड में

,

एक्सएमएल में: @ [पैकेज:] लेआउट/फ़ाइल नाम

तरह

android:id="@+id/android:list" 

यह मानक तरीका सूची दृश्य जब उल्लेख करने के लिए है सूची में सुधार करना वाक्यांश या सूची सक्रियता

इसलिए फ़ाइल नाम एंड्रॉइड है: सूची I ListView का एक संदर्भ है।

नेविगेट res/values/ids.xml को

आप पाएंगे <item type="id" name="list" />

ListView एक दृश्य के समूह है कि स्क्रॉल मदों की एक सूची प्रदर्शित करता है। सूची आइटम स्वचालित रूप से एक एडाप्टर का उपयोग करके सूची में डाले जाते हैं जो किसी स्रोत या सामग्री क्वेरी जैसे स्रोत से सामग्री खींचता है और प्रत्येक आइटम परिणाम को उस दृश्य में परिवर्तित करता है जो सूची में रखा जाता है।

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