2012-03-03 57 views
11
在Java中的Android应用程序中的

我如何从内部匿名类访问外部类的变量? 实施例:在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 
      ....... 

     } 
    }); 

回答

19

如果对话框变量是外类的字段,则可以使用this与外类名(a qualified this)前缀:

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

可选地,如果dialiog变量是它需要一个局部变量来被标记为最终:

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

当'dialog'是外部类的字段时,这是正确的答案。我认为在这种情况下,它是围绕内部类的方法中的局部变量。 – 2012-03-03 09:51:36

5

使外局部变量(dialogfinal所以你可以从内部类中引用它。

1

如果它是一个局部变量(如签名建议),它需要final为内部类能够访问它。如果它是一个成员变量,则可见性修饰符需要是默认(无修饰符)或更高(受保护或公开)。随着private -modifier,它仍然有效,但你可能会得到一个警告(取决于你的编译器的设置):

读访问封闭场SomeClass.someField由 合成存取方法模拟

+1

关于成员变量的部分不正确。内部类可以访问封闭类的私有成员 - 编译器为这些成员生成隐藏的访问器。 – casablanca 2012-03-03 09:56:05

+0

@casablanca:真的,我编辑了答案 – esaj 2012-03-03 10:00:47

相关问题