2012-08-26 12 views
8

संभव डुप्लिकेट:
What's the “dot” for when registering an Activityएंड्रॉइड में अग्रणी बिंदु: नाम वास्तव में आवश्यक है?

क्रियाएँ, सेवा, आदि सभी के सभी एंड्रॉयड उदाहरण नामों में एक बिंदु के साथ शुरू करते हैं:

<activity android:name=".MyActivity" /> 

मैं यह करने के भूल गया सभी एंड्रॉइड परियोजनाओं में - लेकिन वे सही काम करते हैं।

मेरा प्रश्न: क्या यह मुख्य बिंदु वास्तव में आवश्यक है?

संपादित करें: यहां मेरे एक ऐप्स से एक छोटा स्नैपशॉट उदाहरण है। यह ऐप सही काम करता है। यह योग्य नामों का उपयोग नहीं करता है और यह डॉट्स का उपयोग नहीं करता है:

<activity 
     android:exported="false" 
    android:name="Tankvorgaenge" > 

    <intent-filter> 
     <action android:name="android.intent.action.SEARCH" /> 
    </intent-filter> 

    <meta-data 
     android:name="android.app.searchable" 
     android:resource="@xml/searchable" /> 
</activity> 

<activity android:name="Tankvorgangdetails" /> 
<activity android:name="Tankvorgangdetailsbearbeiten" /> 
<activity android:name="TankvorgangUebersicht" /> 
<activity android:name="Verbrauch" /> 

<service android:name="MyService" /> 
+0

मैंने देखा कि पुराने एडीटी/एसडीके का उपयोग करके इसमें कोई डॉट नहीं है, लेकिन नया यह स्वचालित रूप से करता है ... मैंने जो देखा है उससे। – EGHDK

+0

दर्दनाक अनुभव से, मैं हमेशा पूर्ण वर्ग नाम नहीं, डॉट का उपयोग करता हूं। कुछ एपीआई स्तरों के साथ कुछ फोन पर ऐप में क्रैश होने के बाद और सिर्फ एपीआई से संबंधित नहीं, 2 एचटीसी डिजायर, 2.3 दोनों। एक दुर्घटनाग्रस्त हो गया, एक नहीं! मुझे इसके लिए कोई कारण नहीं मिला है। – Simon

उत्तर

19

डॉट छोड़ना और पूरी तरह से योग्यता पैकेज/वर्ग के नाम से काम करेगा यदि और केवल यदि निर्दिष्ट वर्ग अपने आवेदन के भीतर किसी सबपैकेज का हिस्सा नहीं है नहीं मिलते हैं।

आपके आवेदन पैकेज का नाम com.example.myapp है, और आप एक गतिविधि वर्ग com.example.myapp.MyActivity है:

  1. android:name="MyActivity" काम करेंगे।
  2. android:name=".MyActivity" काम करेगा।
  3. android:name="com.example.myapp.MyActivity" काम करेगा।

लेकिन यदि आपके पास com.example.myapp.myactivities.MyActivity चीजें बदलती हैं तो आपके स्रोत पेड़ के भीतर एक उप-पैकेज में एक ही एप्लिकेशन पैकेज और गतिविधि वर्ग है।

  1. android:name=".myactivities.MyActivity"
  2. android:name="com.example.myapp.myactivities.MyActivity"
  3. android:name="MyActivity"काम नहीं करेगा
  4. android:name="myactivities.MyActivity"काम नहीं करेगा काम करेंगे काम करेंगे

क्योंकि कि कि उसका अनुमान लगा होगा 3 काम नहीं करता है वर्ग का मतलब आपका मतलब वास्तव मेंहै 10 ऊपर दिए गए पहले उदाहरण की तरह। इस नाम वाला एक वर्ग नहीं मिलेगा और आपको एक त्रुटि मिलेगी।

4 काम नहीं करता है क्योंकि यह पूरी तरह से योग्य वर्ग नाम की तरह दिखता है, यह प्रणाली इसका अर्थ यह समझने के लिए होगी कि myactivities.MyActivity पूरी तरह से योग्य नाम है, न कि com.example.myapp.myactivities.MyActivity का असली नाम।

आपको यह स्पष्ट करने के लिए यहां प्रमुख बिंदु की आवश्यकता है कि आप एक सापेक्ष पथ का उपयोग कर रहे हैं, न कि पूर्ण पथ। यदि आप केवल एक क्लास नाम निर्दिष्ट करते हैं जिसमें कोई पैकेज जानकारी नहीं है, तो सिस्टम यह बताता है कि कक्षा आपके एप्लिकेशन पैकेज पदानुक्रम की जड़ पर है।

0

यह आवश्यक है। यह पैकेज नाम के लिए संक्षेप है। एंड्रॉइड: नाम पूर्ण वर्ग का नाम निर्दिष्ट करना है। एक अग्रणी बिंदु डालने से, हम संकेत दे सकते हैं कि निम्न वर्ग का नाम उपरोक्त घोषित "पैकेज" के भीतर है।

+0

मेरे सभी ऐप्स क्यों काम करते हैं? मेरे किसी भी ऐप में मैं पूरी तरह से योग्य नामों का उपयोग नहीं करता और मैं डॉट का उपयोग नहीं करता हूं। –

2

डॉट ऐप के सापेक्ष पथ का उपयोग करने के लिए package_name देता है। आप हाँ, activity[android:name] या तो एक पूरी तरह से योग्य package.Class निर्दिष्ट करना चाहिए com.yourActivityPackage.MyActivity

+0

मेरे सभी ऐप्स क्यों काम करते हैं? मेरे किसी भी ऐप में मैं पूरी तरह से योग्य नामों का उपयोग नहीं करता और मैं डॉट का उपयोग नहीं करता हूं। –

1

साथ .MyActivity जगह ले सकता है, या अगर यह एक बिंदु के साथ शुरू होता है, तो यह application के पैकेज के साथ जोड़ दिया गया है।

doc

+0

मेरे सभी ऐप्स क्यों काम करते हैं? मेरे किसी भी ऐप में मैं पूरी तरह से योग्य नामों का उपयोग नहीं करता और मैं डॉट का उपयोग नहीं करता हूं। –

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