2012-08-26 9 views
8

thể trùng lặp:
What's the “dot” for when registering an ActivityDấu chấm đứng đầu trong android: tên thật sự cần thiết?

Trong tất cả các ví dụ tên Android hoạt động, dịch vụ, vv tất cả bắt đầu với một dấu chấm:

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

Tôi quên để làm điều này trong tất cả các dự án Android - nhưng chúng hoạt động hoàn hảo.

Câu hỏi của tôi: Dấu chấm đầu tiên này có thực sự cần thiết không?

EDIT: Đây là ví dụ về ảnh chụp nhanh từ một trong các ứng dụng của tôi. Ứng dụng này hoạt động hoàn hảo. Nó không sử dụng tên đủ điều kiện và không sử dụng các dấu chấm:

<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

Tôi nhận thấy rằng bằng cách sử dụng ADT/SDK cũ hơn, nó không có dấu chấm, nhưng mới hơn tự động làm ... từ những gì tôi đã nhìn thấy. – EGHDK

+0

Từ kinh nghiệm đau đớn, tôi luôn sử dụng dấu chấm, không phải là tên đầy đủ. Đây là sau khi tôi đã bị treo trong một ứng dụng trên một số điện thoại với mức API nhất định và không chỉ liên quan đến API, 2 HTC Desires, cả 2.3. Một người bị rơi, một người thì không! Tôi chưa bao giờ tìm thấy lý do cho nó. – Simon

Trả lời

19

Bỏ dấu chấm và không hoàn toàn đủ điều kiện tên gói/lớp sẽ làm việc khi và chỉ khi các lớp được chỉ định không phải là một phần của một gói con trong ứng dụng của bạn.

Nếu tên gói ứng dụng của bạn là com.example.myapp, và bạn có một lớp hoạt động com.example.myapp.MyActivity:

  1. android:name="MyActivity" sẽ làm việc.
  2. android:name=".MyActivity" sẽ hoạt động.
  3. android:name="com.example.myapp.MyActivity" sẽ hoạt động.

Nhưng nếu bạn có cùng gói ứng dụng và lớp hoạt động trong gói con trong cây nguồn chẳng hạn như com.example.myapp.myactivities.MyActivity thì mọi thứ sẽ thay đổi.

  1. android:name=".myactivities.MyActivity" sẽ làm việc
  2. android:name="com.example.myapp.myactivities.MyActivity" sẽ làm việc
  3. android:name="MyActivity"sẽ không làm việc
  4. android:name="myactivities.MyActivity"sẽ không làm việc

3 không hoạt động bởi vì đó sẽ suy ra rằng tên lớp bạn có nghĩa là thực sự là com.example.myapp.MyActivity như trong ví dụ đầu tiên ở trên. Một lớp học với tên này sẽ không được tìm thấy và bạn sẽ gặp lỗi.

4 không hoạt động vì nó giống như tên lớp đủ điều kiện, đó là hệ thống sẽ diễn giải nó có nghĩa là myactivities.MyActivity là tên đầy đủ, chứ không phải tên thật của com.example.myapp.myactivities.MyActivity.

Bạn cần dấu chấm đầu ở đây để làm rõ rằng bạn đang sử dụng đường dẫn tương đối chứ không phải đường dẫn tuyệt đối. Nếu bạn chỉ định một tên lớp mà không có thông tin gói nào cả, hệ thống sẽ thông báo rằng lớp đó nằm trong thư mục gốc của hệ thống phân cấp gói ứng dụng của bạn.

0

Bắt buộc phải có. Nó là viết tắt cho tên gói. android: name là nghĩa vụ phải chỉ định tên lớp đầy đủ. Bằng cách đặt vào một dấu chấm đầu, chúng tôi có thể chỉ ra rằng tên lớp sau nằm trong "gói" được khai báo ở trên trong tệp kê khai.

+0

Tại sao tất cả các ứng dụng của tôi hoạt động? Trong không có ứng dụng nào của tôi, tôi sử dụng tên đủ điều kiện và tôi không sử dụng dấu chấm. –

2

Dấu chấm là sử dụng đường dẫn tương đối cho ứng dụng cung cấp package_name. Bạn có thể thay .MyActivity với com.yourActivityPackage.MyActivity

+0

Tại sao tất cả các ứng dụng của tôi hoạt động? Trong không có ứng dụng nào của tôi, tôi sử dụng tên đủ điều kiện và tôi không sử dụng dấu chấm. –

1

Vâng, activity[android:name] nên thể chỉ định một đầy đủ package.Class, hoặc nếu nó bắt đầu bằng một dấu chấm, sau đó nó được gắn vào gói 's application.

Xem doc

+0

Tại sao tất cả các ứng dụng của tôi hoạt động? Trong không có ứng dụng nào của tôi, tôi sử dụng tên đủ điều kiện và tôi không sử dụng dấu chấm. –