15

在 Java android 应用程序中,我如何从内部匿名类访问外部类的变量?例子:

    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
           .......

        }
    });
4

3 回答 3

29

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

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

或者,如果 dialiog 变量是局部变量,则需要将其标记为 final:

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();
    }
});
于 2012-03-03T09:48:28.703 回答
4

制作外部局部变量 ( dialog) final,以便您可以从内部类中引用它。

于 2012-03-03T09:50:38.013 回答
1

如果它是一个局部变量(如签名所暗示的那样),则它必须是final内部类才能访问它。如果它是成员变量,则可见性修饰符需要为默认值(无修饰符)或更高(受保护或公共)。使用private-modifier,它仍然有效,但您可能会收到警告(取决于您的编译器设置):

对封闭字段 SomeClass.someField 的读取访问由合成访问器方法模拟

于 2012-03-03T09:51:35.723 回答