2012-09-26 27 views
7

En el Tutorial de programación de Android anterior, página 192, vemos una implementación de LunchList#onOptionsItemSelected. Dentro de esta implementación, vemos dos Intent pasados ​​a startActivity: uno cuyo constructor se pasa LunchList.this, el otro cuyo constructor se pasa this.¿Cuál es la diferencia entre pasar esto frente a ClassName.this desde un controlador de eventos cuando se pasa al constructor de Intent?

¿Cuál es la diferencia?

See lines 78 - 91 here. Observe que onOptionsItemSelected no está declarado dentro de una clase interna.

En Android/Java, ¿cambia el valor de this en el contexto de los controladores de eventos o la vinculación de funciones a través de la reflexión? ¿Podrían pasar las Intent instancias al this?

Respuesta

10

En Java, this se refiere a la clase que contiene, y ClassName.this refiere a la clase primero contiene cuyo nombre es ClassName. Los manejadores de eventos normalmente se escriben como clases internas anónimas, por lo que si desea hacer referencia a la clase que contiene el manejador de eventos (y no a la clase del manejador de eventos), debe especificar ContainingClass.this, no this.

Referencia: http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.8.4

+0

He agregado un enlace a la fuente en cuestión. Tenga en cuenta que 'onOptionsItemSelected' no se declara dentro de una clase interna. – ybakos

+1

En ese caso, el nombre de clase es superfluo/redundante. – JimN

2

Al crear una Intent dentro de un Inner Class uso ClassName.this (aquí className debe ser el nombre de clase de actividad) y si la creación de Intent dentro de una clase Activity puede utilizar this.

+0

He agregado un enlace a la fuente en cuestión. Tenga en cuenta que 'onOptionsItemSelected' no se declara dentro de una clase interna – ybakos

+0

También puede usar' this' en lugar de 'LunchList.this'. – Nishant

+0

Lo que significa que no hay diferencia en este caso? – ybakos

1

Para este ejemplo no hará ninguna diferencia como en cualquiera de las condiciones de la clase que se iniciará la actividad se mantendrá igual. El primer parámetro de la intención se refiere al contexto de la clase desde donde se lanzará la actividad y desde donde se pasarán los datos del paquete.

Cuestiones relacionadas