¿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?
- Cuántas llamadas de función causarán desbordamiento de pila
- ¿El mensaje de excepción es nulo?
- ¿Cómo eliminar la aplicación raíz / app / archivos?
- Captura todas las excepciones de tipo de programación de Android
- Cláusula Throws en el manejo de excepciones
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 Android, ¿Se puede interceptar eventos clave a nivel mundial antes de que lleguen al niño?
- Uso de la gestión de excepciones globales con "setUncaughtExceptionHandler" y "Toast"
- OnTouch, onLongClick juntos en android
- Android onScrollChanged para Scrollview disparado varias veces
- ListView clic largo no funciona cuando un botón está en la lista
- Tratar las excepciones (de proceso cruzado) en el proveedor de contenido personalizado de Android
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.