2011-01-28 36 views
48

Tôi là một người không thích lập trình cho hệ điều hành Android. Tôi nhận thấy trong các cuốn sách tôi đã đọc rằng các tác giả đã đặt một "dấu chấm" trước tên hoạt động khi đăng ký hoạt động của họ trong tệp kê khai. Tôi đã xem xét trang web dành cho nhà phát triển Android và tôi không thể tìm ra lý do tại sao chúng tôi cần "dấu chấm". Liệu "dấu chấm" thực sự là một mục đích? Tôi có cần nó không? Tôi đã bao gồm một ví dụ dưới đây. Lưu ý "dấu chấm" trước "NewActivity":"Dấu chấm" là gì khi đăng ký Hoạt động

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

Trả lời

40

Như bạn đã nhận thấy điểm không cần thiết nhưng về cơ bản có nghĩa là: lớp hoạt động sống trong cùng một gói ứng dụng. Vì vậy, nếu gói ứng dụng của bạn là: com.my.package thì:

  • .YourActivity có nghĩa là lớp học của bạn là bên trong com.my.package.
  • YourActivity có nghĩa là lớp học của bạn nằm trong số com.my.package (tương tự như trên).
  • .activities.YourActivity có nghĩa là lớp học của bạn nằm trong số com.my.package.activitites.
  • Bạn thậm chí có thể làm điều gì đó như: com.my.package.activities.YourActivity hữu ích khi bạn muốn có các phiên bản ứng dụng khác nhau và sử dụng Ant để tự động thay đổi tham chiếu đến gói.
+5

Các tài liệu dường như để nói rằng bạn cần phải chấm hàng đầu để có được tên gói pre-pended. Có vẻ như một tai nạn mà một "YourActivity" trần hoạt động ở tất cả. Tại sao nó không được hiểu như là một tên lớp trong gói mặc định (nhiều maligned)? –

+2

Đó không phải là một tai nạn ...hãy xem mã nguồn;) – Cristian

+0

vì tài liệu không giống như ngụ ý mã nguồn đang làm gì để nó có thể được gọi là một tai nạn. –

26

http://developer.android.com/guide/topics/manifest/activity-element.html#nm

android: tên
Tên của lớp mà thực hiện các hoạt động, một lớp con của hoạt động. Giá trị thuộc tính phải là tên lớp hoàn toàn đủ điều kiện (chẳng hạn như "com.example.project.ExtracurricularActivity"). Tuy nhiên, như một cách viết tắt, nếu ký tự đầu tiên của tên là giai đoạn (ví dụ, ".ExtracurricularActivity"), nó được gắn vào tên gói được quy định trong <manifest>.

Vì vậy, cho ApplicationManifest.xml:

<manifest 
    ... 
    package="com.stackoverflow.android.geotask" 
    ...> 
    <application ...> 
     <activity android:name=".view.TaskListListView" ...> 
     ... 
    </application> 
</manifest> 

sau đó kể từ android:name=".view.TaskListListView" có một khoảng thời gian hàng đầu, vì vậy nó được hiểu là android:name="com.stackoverflow.android.geotask.view.TaskListListView".

+1

Tôi nghĩ tốt nhất nên luôn luôn bao gồm tên lớp học đầy đủ, theo cách này, bạn có thể tránh được dấu chấm khó hiểu. – VSG24

2

Dấu chấm đó sẽ thêm package vào tệp kê khai ứng dụng của bạn.

Nếu tên gói của bạn là com.app.demo.

<activity android:name=".HelloWorldActivity"> 

Điều đó có nghĩa là Hoạt động nằm trong gói demo.

Bạn có thể thay thế này với

<activity android:name="com.app.demo.HelloWorldActivity"> 
Các vấn đề liên quan