¿Cuál es la diferencia entre pasar este vs ClassName.this de un controlador de eventos cuando se pasa a constructor de Intent?

En el anterior tutorial de programación de Android, página 192, vemos una implementación de LunchList#onOptionsItemSelected . Dentro de esta implementación vemos dos startActivity pasados ​​a startActivity : uno cuyo constructor se pasa LunchList.this , el otro cuyo constructor se pasa this .

¿Cual es la diferencia?

Vea las líneas 78 – 91 aquí . Tenga en cuenta cómo onOptionsItemSelected no se declara dentro de una clase interna.

En Android / Java hace el valor de this cambio dentro del contexto de los manejadores de eventos o vinculación de funciones a través de la reflexión? ¿Podrían ambas instancias de Intent pasar this ?

En Java, this refiere a la clase que contiene, y ClassName.this refiere a la primera clase conteniendo cuyo nombre es ClassName . Los controladores de eventos normalmente se escriben como clases internas anónimas, por lo que si desea referirse a la clase que contiene el controlador de eventos (y no a la clase del controlador 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

Cuando está creando una Intent dentro de una Inner Class use ClassName.this (aquí className debe ser el nombre de la clase Activity) y si está creando Intent dentro de una clase Activity puede usar this .

Para este ejemplo no hará ninguna diferencia ya que en cualquier condición la clase que iniciará la actividad permanecerá igual. El primer parámetro de la Intención se refiere al contexto de la clase desde donde se iniciará la actividad y desde donde se pasarán los datos del paquete.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.