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内部クラスがそれにアクセスできるようにする必要があります。メンバー変数の場合、可視性修飾子はデフォルト (修飾子なし) またはそれ以上 (保護またはパブリック) である必要があります。-modifierprivateを使用しても機能しますが、警告が表示される場合があります (コンパイラの設定によって異なります)。

囲んでいるフィールド SomeClass.someField への読み取りアクセスは、合成アクセサー メソッドによってエミュレートされます。

于 2012-03-03T09:51:35.723 に答える