2012-03-03 19 views
11

en la aplicación de Android de Java ¿cómo puedo acceder a las variables de clase externa desde la clase anónima interna? Ejemplo:variables de acceso de clase externa en Java

ProgressDialog dialog = new ProgressDialog(this); 
    ..... 
    send.setOnClickListener(new View.OnClickListener() 
    { 
     public void onClick(View v) { 

      //here i'd like to do something with **dialog** variable 
      ....... 

     } 
    }); 

Respuesta

19

Si la variable de diálogo es un campo de la clase externa, puede utilizar this prefijado con el nombre de clase exterior (a qualified this):

send.setOnClickListener(new View.OnClickListener() 
{ 
    public void onClick(View v) { 
     ProgressDialog dlg = OuterClass.this.dialog; 
     ....... 
    } 
}); 

Alternativamente, si la variable dialiog es una variable local tiene que ser marcado como definitiva:

final ProgressDialog dialog = new ProgressDialog(this); 
..... 
send.setOnClickListener(new View.OnClickListener() 
{ 
    public void onClick(View v) { 
     // The dialog variable is in scope here ... 
     dialog.someMethod(); 
    } 
}); 
+0

Esta es la respuesta correcta cuando 'dialog' es un campo de la clase externa. Creo que en este caso es una variable local en el método alrededor de la clase interna. –

5

Hacer la variable local externa (dialog) final para que pueda consultarlo desde la clase interna.

1

Si se trata de una variable local (como sugiere la firma), debe ser final para que la clase interna pueda acceder a ella. Si es una variable miembro, el modificador de visibilidad debe ser el predeterminado (sin modificador) o superior (protegido o público). Con private -modifier, que todavía funciona, pero es posible obtener una advertencia (dependiendo de la configuración del compilador-):

acceso de lectura a encerrar SomeClass.someField campo es emulado por un método de acceso sintética

+1

La parte acerca de las variables miembro no es verdadera. Las clases internas pueden acceder a miembros privados de la clase adjunta: el compilador genera accesos ocultos para dichos miembros. – casablanca

+0

@casablanca: cierto, edité la respuesta – esaj

Cuestiones relacionadas