2011-01-28 16 views
48

Soy un novato en la programación para el sistema operativo Android. Noté en los libros que he estado leyendo que los autores colocaron un "punto" delante del nombre de la actividad al registrar sus actividades en el manifiesto. He buscado en el sitio del desarrollador de Android y no puedo entender por qué necesitamos el "punto". ¿El "punto" realmente sirve un propósito? ¿Lo necesito? He incluido un ejemplo a continuación. Observe el "punto" antes "NewActivity":¿Cuál es el "punto" para registrar una actividad?

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

Respuesta

40

Como usted ha notado el punto no es necesario, pero básicamente significa: la clase de actividad vive en el mismo paquete de la aplicación. Por lo tanto, si su paquete de aplicación es: com.my.package a continuación:

  • .YourActivity significa que su clase está dentro com.my.package.
  • YourActivity significa que su clase está dentro de com.my.package (igual que en el ejemplo anterior).
  • .activities.YourActivity significa que su clase está dentro de com.my.package.activitites.
  • Incluso puede hacer algo como: com.my.package.activities.YourActivity que es útil cuando quiere tener diferentes versiones de su aplicación y usa Ant para cambiar las referencias al paquete automáticamente.
+5

La documentación parece decir que necesita el punto inicial para obtener el nombre del paquete pre-adjuntas. Parece un accidente que un "YourActivity" desnudo funcione en absoluto. ¿Por qué no se interpreta como un nombre de clase en el paquete predeterminado (muy difamado)? –

+2

No es un accidente ...eche un vistazo al código fuente;) – Cristian

+0

, ya que la documentación no implica lo mismo que el código fuente, por lo que puede denominarse como un accidente. –

26

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

androide: nombrar
El nombre de la clase que implementa la actividad, una subclase de actividad. El valor del atributo debe ser un nombre de clase completamente calificado (como, "com.example.project.ExtracurricularActivity"). Sin embargo, como una taquigrafía, si el primer carácter del nombre es un período (por ejemplo, ".ExtracurricularActivity"), se añade al nombre de paquete especificado en el <manifest>.

Así da ApplicationManifest.xml:

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

entonces ya android:name=".view.TaskListListView" tiene un punto inicial, por lo que se interpreta como android:name="com.stackoverflow.android.geotask.view.TaskListListView".

+1

Creo que es mejor incluir siempre el nombre de clase completo, de esta manera, se puede evitar el punto confuso. – VSG24

2

Ese punto agregará su package en el manifiesto de su aplicación.

Si el nombre de su paquete es com.app.demo.

<activity android:name=".HelloWorldActivity"> 

Significa que la actividad se encuentra dentro del paquete de demostración.

Puede reemplazar esto con

<activity android:name="com.app.demo.HelloWorldActivity"> 
Cuestiones relacionadas